ExternalIdCache: Add method to get external IDs by account ID + scheme
Change-Id: I800c41923facbfe9194ce47716ed2d23d0ffd70a
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/GpgKeys.java b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/GpgKeys.java
index b1d1324..442f4e7 100644
--- a/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/GpgKeys.java
+++ b/gerrit-gpg/src/main/java/com/google/gerrit/gpg/server/GpgKeys.java
@@ -210,8 +210,8 @@
@VisibleForTesting
public static FluentIterable<AccountExternalId> getGpgExtIds(
ExternalIdCache externalIdCache, Account.Id accountId) {
- return FluentIterable.from(externalIdCache.byAccount(accountId))
- .filter(in -> in.isScheme(SCHEME_GPGKEY));
+ return FluentIterable.from(
+ externalIdCache.byAccount(accountId, SCHEME_GPGKEY));
}
private Iterable<AccountExternalId> getGpgExtIds(AccountResource rsrc) {
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/ChangeUserName.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/ChangeUserName.java
index bbe7ba6..e600e9c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/ChangeUserName.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/ChangeUserName.java
@@ -30,7 +30,6 @@
import com.google.inject.assistedinject.Assisted;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.Callable;
@@ -76,7 +75,8 @@
@Override
public VoidResult call() throws OrmException, NameAlreadyUsedException,
InvalidUserNameException, IOException {
- final Collection<AccountExternalId> old = old();
+ Collection<AccountExternalId> old =
+ externalIdCache.byAccount(user.getAccountId(), SCHEME_USERNAME);
if (!old.isEmpty()) {
throw new IllegalStateException(USERNAME_CANNOT_BE_CHANGED);
}
@@ -128,15 +128,4 @@
sshKeyCache.evict(newUsername);
return VoidResult.INSTANCE;
}
-
- private Collection<AccountExternalId> old() {
- final Collection<AccountExternalId> r = new ArrayList<>(1);
- for (AccountExternalId i : externalIdCache.byAccount(
- user.getAccountId())) {
- if (i.isScheme(SCHEME_USERNAME)) {
- r.add(i);
- }
- }
- return r;
- }
}
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalIdCache.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalIdCache.java
index 8852e81e..001febd 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalIdCache.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/ExternalIdCache.java
@@ -14,11 +14,14 @@
package com.google.gerrit.server.account;
+import static java.util.stream.Collectors.toSet;
+
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.AccountExternalId;
import java.util.Collection;
import java.util.Collections;
+import java.util.Set;
/** Caches external ids of all accounts */
public interface ExternalIdCache {
@@ -40,4 +43,10 @@
default void onRemove(Account.Id accountId, AccountExternalId.Key extIdKey) {
onRemove(accountId, Collections.singleton(extIdKey));
}
+
+ default Set<AccountExternalId> byAccount(Account.Id accountId,
+ String scheme) {
+ return byAccount(accountId).stream().filter(e -> e.isScheme(scheme))
+ .collect(toSet());
+ }
}