Fix reloading of configuration and meta-data changes

Id5819facb591d548df9febf288e38065949128ec made a lot of classes
singleton and as result the configuration and the meta-data storage
was never updated at runtime.

I3f2797983ee5ab690b9806f9b8f4744259598810 fixed one occurrence of this
problem but missed to do the same fix in all affected places.

Change-Id: I210f6a4c1c3d2156c99e991c72022709a237e7ae
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
(cherry picked from commit 838472ff6fdaf9711c9dbed5569000af731a86d2)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
index 45ad2ba..d7cd3d2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetOwner.java
@@ -34,20 +34,23 @@
 @Singleton
 class GetOwner implements RestReadView<ServiceUserResource> {
   private final GroupsCollection groups;
-  private final ProjectLevelConfig storage;
+  private final String pluginName;
+  private final ProjectCache projectCache;
   private final GroupJson json;
 
   @Inject
   GetOwner(GroupsCollection groups, @PluginName String pluginName,
       ProjectCache projectCache, GroupJson json) {
     this.groups = groups;
-    this.storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
+    this.pluginName = pluginName;
+    this.projectCache = projectCache;
     this.json = json;
   }
 
   @Override
   public Response<GroupInfo> apply(ServiceUserResource rsrc)
       throws ResourceNotFoundException, OrmException {
+    ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
     String owner = storage.get().getString(USER, rsrc.getUser().getUserName(), KEY_OWNER);
     if (owner != null) {
       GroupDescription.Basic group = groups.parseId(owner);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetServiceUser.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetServiceUser.java
index 6056524..497bc47 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetServiceUser.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/GetServiceUser.java
@@ -39,7 +39,8 @@
 @Singleton
 class GetServiceUser implements RestReadView<ServiceUserResource> {
   private final Provider<GetAccount> getAccount;
-  private final ProjectLevelConfig storage;
+  private final String pluginName;
+  private final ProjectCache projectCache;
   private final GetOwner getOwner;
   private final AccountInfo.Loader.Factory accountLoader;
 
@@ -48,7 +49,8 @@
       @PluginName String pluginName, ProjectCache projectCache,
       GetOwner getOwner, AccountInfo.Loader.Factory accountLoader) {
     this.getAccount = getAccount;
-    this.storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
+    this.pluginName = pluginName;
+    this.projectCache = projectCache;
     this.getOwner = getOwner;
     this.accountLoader = accountLoader;
   }
@@ -56,6 +58,7 @@
   @Override
   public ServiceUserInfo apply(ServiceUserResource rsrc)
       throws ResourceNotFoundException, OrmException {
+    ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
     String username = rsrc.getUser().getUserName();
     Config db = storage.get();
     if (!db.getSubsections(USER).contains(username)) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ListServiceUsers.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ListServiceUsers.java
index b295df2..e6e4e06 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ListServiceUsers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ListServiceUsers.java
@@ -42,7 +42,8 @@
 @Singleton
 class ListServiceUsers implements RestReadView<ConfigResource> {
   private final Provider<CurrentUser> userProvider;
-  private final ProjectLevelConfig storage;
+  private final String pluginName;
+  private final ProjectCache projectCache;
   private final AccountCache accountCache;
   private final Provider<ServiceUserCollection> serviceUsers;
   private final Provider<GetServiceUser> getServiceUser;
@@ -53,7 +54,8 @@
       AccountCache accountCache, Provider<ServiceUserCollection> serviceUsers,
       Provider<GetServiceUser> getServiceUser) {
     this.userProvider = userProvider;
-    this.storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
+    this.pluginName = pluginName;
+    this.projectCache = projectCache;
     this.accountCache = accountCache;
     this.serviceUsers = serviceUsers;
     this.getServiceUser = getServiceUser;
@@ -62,6 +64,7 @@
   @Override
   public Map<String, ServiceUserInfo> apply(ConfigResource rscr)
       throws OrmException, AuthException {
+    ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
     CurrentUser user = userProvider.get();
     if (user == null || !user.isIdentifiedUser()) {
       throw new AuthException("Authentication required");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java
index be3c3c5..f411dfc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/PutOwner.java
@@ -57,7 +57,8 @@
 
   private final Provider<GetConfig> getConfig;
   private final GroupsCollection groups;
-  private final ProjectLevelConfig storage;
+  private final String pluginName;
+  private final ProjectCache projectCache;
   private final Project.NameKey allProjects;
   private final MetaDataUpdate.User metaDataUpdateFactory;
   private final GroupJson json;
@@ -70,7 +71,8 @@
       Provider<CurrentUser> self) {
     this.getConfig = getConfig;
     this.groups = groups;
-    this.storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
+    this.pluginName = pluginName;
+    this.projectCache = projectCache;
     this.allProjects = projectCache.getAllProjects().getProject().getNameKey();
     this.metaDataUpdateFactory = metaDataUpdateFactory;
     this.json = json;
@@ -81,6 +83,7 @@
   public Response<GroupInfo> apply(ServiceUserResource rsrc, Input input)
       throws UnprocessableEntityException, RepositoryNotFoundException,
       MethodNotAllowedException, IOException, OrmException, ResourceConflictException {
+    ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
     Boolean ownerAllowed = getConfig.get().apply(new ConfigResource()).allowOwner;
     if ((ownerAllowed == null || !ownerAllowed)
         && !self.get().getCapabilities().canAdministrateServer()) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java
index 5d709a2..0638922 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/RefUpdateListener.java
@@ -42,7 +42,8 @@
   private final CreateServiceUserNotes.Factory serviceUserNotesFactory;
   private final GitRepositoryManager repoManager;
   private final WorkQueue workQueue;
-  private final PluginConfig cfg;
+  private final PluginConfigFactory cfgFactory;
+  private final String pluginName;
 
   @Inject
   RefUpdateListener(CreateServiceUserNotes.Factory serviceUserNotesFactory,
@@ -51,11 +52,13 @@
     this.serviceUserNotesFactory = serviceUserNotesFactory;
     this.repoManager = repoManager;
     this.workQueue = workQueue;
-    this.cfg = cfgFactory.getFromGerritConfig(pluginName);
+    this.cfgFactory = cfgFactory;
+    this.pluginName = pluginName;
   }
 
   @Override
   public void onGitReferenceUpdated(final Event event) {
+    PluginConfig cfg = cfgFactory.getFromGerritConfig(pluginName);
     if (!cfg.getBoolean("createNotes", true)) {
       return;
     }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java
index 19ef84c..12d8d1c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/serviceuser/ServiceUserCollection.java
@@ -50,7 +50,8 @@
   private final CreateServiceUser.Factory createServiceUserFactory;
   private final Provider<ListServiceUsers> list;
   private final Provider<AccountsCollection> accounts;
-  private final ProjectLevelConfig storage;
+  private final String pluginName;
+  private final ProjectCache projectCache;
   private final Provider<CurrentUser> userProvider;
   private final GroupsCollection groups;
 
@@ -64,7 +65,8 @@
     this.createServiceUserFactory = createServiceUserFactory;
     this.list = list;
     this.accounts = accounts;
-    this.storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
+    this.pluginName = pluginName;
+    this.projectCache = projectCache;
     this.userProvider = userProvider;
     this.groups = groups;
   }
@@ -72,6 +74,7 @@
   @Override
   public ServiceUserResource parse(ConfigResource parent, IdString id)
       throws ResourceNotFoundException, AuthException, OrmException {
+    ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".db");
     IdentifiedUser serviceUser = accounts.get().parseId(id.get());
     if (serviceUser == null
         || !storage.get().getSubsections(USER)