ExternalUser: Allow specifying a PropertyMap

PropertyMap is a concept of CurrentUser to store or cache per-user
state. This state is immutable for the lifetime of the object.

With this commit, we allow specifying this state for ExternalUser.

Change-Id: I41fc3d148d3cf3a0870f1bde1de5dd37ae0ebea5
diff --git a/java/com/google/gerrit/server/ExternalUser.java b/java/com/google/gerrit/server/ExternalUser.java
index cb7d559..9680f3e 100644
--- a/java/com/google/gerrit/server/ExternalUser.java
+++ b/java/com/google/gerrit/server/ExternalUser.java
@@ -38,7 +38,9 @@
 
   public interface Factory {
     ExternalUser create(
-        Collection<String> emailAddresses, Collection<ExternalId.Key> externalIdKeys);
+        Collection<String> emailAddresses,
+        Collection<ExternalId.Key> externalIdKeys,
+        PropertyMap propertyMap);
   }
 
   private final GroupBackend groupBackend;
@@ -51,7 +53,9 @@
   public ExternalUser(
       GroupBackend groupBackend,
       @Assisted Collection<String> emailAddresses,
-      @Assisted Collection<ExternalId.Key> externalIdKeys) {
+      @Assisted Collection<ExternalId.Key> externalIdKeys,
+      @Assisted PropertyMap propertyMap) {
+    super(propertyMap);
     this.groupBackend = groupBackend;
     this.emailAddresses = ImmutableSet.copyOf(emailAddresses);
     this.externalIdKeys = ImmutableSet.copyOf(externalIdKeys);
diff --git a/javatests/com/google/gerrit/acceptance/server/permissions/ExternalUserPermissionIT.java b/javatests/com/google/gerrit/acceptance/server/permissions/ExternalUserPermissionIT.java
index f05d338..9e4907c 100644
--- a/javatests/com/google/gerrit/acceptance/server/permissions/ExternalUserPermissionIT.java
+++ b/javatests/com/google/gerrit/acceptance/server/permissions/ExternalUserPermissionIT.java
@@ -41,6 +41,7 @@
 import com.google.gerrit.extensions.restapi.AuthException;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.ExternalUser;
+import com.google.gerrit.server.PropertyMap;
 import com.google.gerrit.server.account.GroupBackend;
 import com.google.gerrit.server.account.GroupMembership;
 import com.google.gerrit.server.account.externalids.ExternalId;
@@ -294,6 +295,7 @@
   ExternalUser createUserInGroup(String userId, String groupId) {
     return externalUserFactory.create(
         ImmutableSet.of(),
-        ImmutableSet.of(ExternalId.Key.parse("company-auth:" + groupId + "-" + userId)));
+        ImmutableSet.of(ExternalId.Key.parse("company-auth:" + groupId + "-" + userId)),
+        PropertyMap.EMPTY);
   }
 }