DestinationConfiguration: Use ImmutableList rather than array

Use ImmutableList rather than java array to store lists of String,
and refactor some usages of them to avoid creating local variables.

Change-Id: I7540f7b92a50faec0cc47af52ae71e2496b8f56e
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
index 6d85965..98a642e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/Destination.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.replication;
 
 import com.google.common.base.Throwables;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSet.Builder;
@@ -57,7 +58,6 @@
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
-import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -105,7 +105,7 @@
     this.stateLog = stateLog;
 
     final CurrentUser remoteUser;
-    if (cfg.getAuthGroupNames().length > 0) {
+    if (!cfg.getAuthGroupNames().isEmpty()) {
       ImmutableSet.Builder<AccountGroup.UUID> builder = ImmutableSet.builder();
       for (String name : cfg.getAuthGroupNames()) {
         GroupReference g = GroupBackends.findExactSuggestion(groupBackend, name);
@@ -390,19 +390,19 @@
     }
 
     // by default push all projects
-    String[] projects = config.getProjects();
-    if (projects.length < 1) {
+    List<String> projects = config.getProjects();
+    if (projects.isEmpty()) {
       return true;
     }
 
-    return (new ReplicationFilter(Arrays.asList(projects))).matches(project);
+    return (new ReplicationFilter(projects)).matches(project);
   }
 
   boolean isSingleProjectMatch() {
-    String[] projects = config.getProjects();
-    boolean ret = (projects.length == 1);
+    List<String> projects = config.getProjects();
+    boolean ret = (projects.size() == 1);
     if (ret) {
-      String projectMatch = projects[0];
+      String projectMatch = projects.get(0);
       if (ReplicationFilter.getPatternType(projectMatch)
           != ReplicationFilter.PatternType.EXACT_MATCH) {
         // projectMatch is either regular expression, or wild-card.
@@ -493,23 +493,22 @@
     }
   }
 
-  String[] getAdminUrls() {
+  ImmutableList<String> getAdminUrls() {
     return config.getAdminUrls();
   }
 
-  String[] getUrls() {
+  ImmutableList<String> getUrls() {
     return config.getUrls();
   }
 
-  String[] getAuthGroupNames() {
+  ImmutableList<String> getAuthGroupNames() {
     return config.getAuthGroupNames();
   }
 
-  String[] getProjects() {
+  ImmutableList<String> getProjects() {
     return config.getProjects();
   }
 
-
   int getLockErrorMaxRetries() {
     return config.getLockErrorMaxRetries();
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationConfiguration.java b/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationConfiguration.java
index 6b39960..6beb644 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationConfiguration.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/DestinationConfiguration.java
@@ -15,6 +15,7 @@
 package com.googlesource.gerrit.plugins.replication;
 
 import com.google.common.base.MoreObjects;
+import com.google.common.collect.ImmutableList;
 
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.transport.RemoteConfig;
@@ -23,27 +24,31 @@
   private final int delay;
   private final int retryDelay;
   private final int lockErrorMaxRetries;
-  private final String[] adminUrls;
+  private final ImmutableList<String> adminUrls;
   private final int poolThreads;
   private final boolean createMissingRepos;
   private final boolean replicatePermissions;
   private final boolean replicateProjectDeletions;
   private final String remoteNameStyle;
-  private final String[] urls;
-  private final String[] projects;
-  private final String[] authGroupNames;
+  private final ImmutableList<String> urls;
+  private final ImmutableList<String> projects;
+  private final ImmutableList<String> authGroupNames;
   private final RemoteConfig remoteConfig;
 
   DestinationConfiguration(RemoteConfig remoteConfig, Config cfg) {
     this.remoteConfig = remoteConfig;
     String name = remoteConfig.getName();
-    urls = cfg.getStringList("remote", name, "url");
+    urls = ImmutableList.copyOf(
+        cfg.getStringList("remote", name, "url"));
     delay = Math.max(0, getInt(remoteConfig, cfg, "replicationdelay", 15));
-    projects = cfg.getStringList("remote", name, "projects");
-    adminUrls = cfg.getStringList("remote", name, "adminUrl");
+    projects = ImmutableList.copyOf(
+        cfg.getStringList("remote", name, "projects"));
+    adminUrls = ImmutableList.copyOf(
+        cfg.getStringList("remote", name, "adminUrl"));
     retryDelay = Math.max(0, getInt(remoteConfig, cfg, "replicationretry", 1));
     poolThreads = Math.max(0, getInt(remoteConfig, cfg, "threads", 1));
-    authGroupNames = cfg.getStringList("remote", name, "authGroup");
+    authGroupNames = ImmutableList.copyOf(
+        cfg.getStringList("remote", name, "authGroup"));
     lockErrorMaxRetries = cfg.getInt("replication", "lockErrorMaxRetries", 0);
 
     createMissingRepos =
@@ -72,19 +77,19 @@
     return lockErrorMaxRetries;
   }
 
-  public String[] getUrls() {
+  public ImmutableList<String> getUrls() {
     return urls;
   }
 
-  public String[] getAdminUrls() {
+  public ImmutableList<String> getAdminUrls() {
     return adminUrls;
   }
 
-  public String[] getProjects() {
+  public ImmutableList<String> getProjects() {
     return projects;
   }
 
-  public String[] getAuthGroupNames() {
+  public ImmutableList<String> getAuthGroupNames() {
     return authGroupNames;
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ListCommand.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ListCommand.java
index 0372d2b..247ebf7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ListCommand.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ListCommand.java
@@ -29,6 +29,7 @@
 import org.kohsuke.args4j.Option;
 
 import java.util.Collection;
+import java.util.List;
 
 @RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
 @CommandMetaData(name = "list", description = "List remote destination information")
@@ -60,8 +61,8 @@
         || name.matches(remote));
   }
 
-  private void addProperty(JsonObject obj, String key, String[] values) {
-    if (values.length > 0) {
+  private void addProperty(JsonObject obj, String key, List<String> values) {
+    if (!values.isEmpty()) {
       JsonArray list = new JsonArray();
       for (String v : values) {
         list.add(new JsonPrimitive(v));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
index 31f8c57..40b2bee 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/replication/ReplicationQueue.java
@@ -52,7 +52,6 @@
 import java.io.OutputStream;
 import java.net.URISyntaxException;
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 
 /** Manages automatic replication to remote repositories. */
@@ -195,11 +194,9 @@
         continue;
       }
 
-      List<URIish> uriList = config.getURIs(projectName, "*");
-      String[] adminUrls = config.getAdminUrls();
       boolean adminURLUsed = false;
 
-      for (String url : adminUrls) {
+      for (String url : config.getAdminUrls()) {
         if (Strings.isNullOrEmpty(url)) {
           continue;
         }
@@ -233,7 +230,7 @@
       }
 
       if (!adminURLUsed) {
-        for (URIish uri : uriList) {
+        for (URIish uri : config.getURIs(projectName, "*")) {
           uris.add(uri);
         }
       }