ExternalIdCache: Add method to get external IDs by account ID + scheme
Change-Id: I800c41923facbfe9194ce47716ed2d23d0ffd70a Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
		@@ -210,8 +210,8 @@ public class GpgKeys implements
 | 
				
			|||||||
  @VisibleForTesting
 | 
					  @VisibleForTesting
 | 
				
			||||||
  public static FluentIterable<AccountExternalId> getGpgExtIds(
 | 
					  public static FluentIterable<AccountExternalId> getGpgExtIds(
 | 
				
			||||||
      ExternalIdCache externalIdCache, Account.Id accountId) {
 | 
					      ExternalIdCache externalIdCache, Account.Id accountId) {
 | 
				
			||||||
    return FluentIterable.from(externalIdCache.byAccount(accountId))
 | 
					    return FluentIterable.from(
 | 
				
			||||||
        .filter(in -> in.isScheme(SCHEME_GPGKEY));
 | 
					        externalIdCache.byAccount(accountId, SCHEME_GPGKEY));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private Iterable<AccountExternalId> getGpgExtIds(AccountResource rsrc) {
 | 
					  private Iterable<AccountExternalId> getGpgExtIds(AccountResource rsrc) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,6 @@ import com.google.inject.Inject;
 | 
				
			|||||||
import com.google.inject.assistedinject.Assisted;
 | 
					import com.google.inject.assistedinject.Assisted;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					 | 
				
			||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
import java.util.concurrent.Callable;
 | 
					import java.util.concurrent.Callable;
 | 
				
			||||||
@@ -76,7 +75,8 @@ public class ChangeUserName implements Callable<VoidResult> {
 | 
				
			|||||||
  @Override
 | 
					  @Override
 | 
				
			||||||
  public VoidResult call() throws OrmException, NameAlreadyUsedException,
 | 
					  public VoidResult call() throws OrmException, NameAlreadyUsedException,
 | 
				
			||||||
      InvalidUserNameException, IOException {
 | 
					      InvalidUserNameException, IOException {
 | 
				
			||||||
    final Collection<AccountExternalId> old = old();
 | 
					    Collection<AccountExternalId> old =
 | 
				
			||||||
 | 
					        externalIdCache.byAccount(user.getAccountId(), SCHEME_USERNAME);
 | 
				
			||||||
    if (!old.isEmpty()) {
 | 
					    if (!old.isEmpty()) {
 | 
				
			||||||
      throw new IllegalStateException(USERNAME_CANNOT_BE_CHANGED);
 | 
					      throw new IllegalStateException(USERNAME_CANNOT_BE_CHANGED);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -128,15 +128,4 @@ public class ChangeUserName implements Callable<VoidResult> {
 | 
				
			|||||||
    sshKeyCache.evict(newUsername);
 | 
					    sshKeyCache.evict(newUsername);
 | 
				
			||||||
    return VoidResult.INSTANCE;
 | 
					    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;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,11 +14,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package com.google.gerrit.server.account;
 | 
					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.Account;
 | 
				
			||||||
import com.google.gerrit.reviewdb.client.AccountExternalId;
 | 
					import com.google.gerrit.reviewdb.client.AccountExternalId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.Collections;
 | 
					import java.util.Collections;
 | 
				
			||||||
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** Caches external ids of all accounts */
 | 
					/** Caches external ids of all accounts */
 | 
				
			||||||
public interface ExternalIdCache {
 | 
					public interface ExternalIdCache {
 | 
				
			||||||
@@ -40,4 +43,10 @@ public interface ExternalIdCache {
 | 
				
			|||||||
  default void onRemove(Account.Id accountId, AccountExternalId.Key extIdKey) {
 | 
					  default void onRemove(Account.Id accountId, AccountExternalId.Key extIdKey) {
 | 
				
			||||||
    onRemove(accountId, Collections.singleton(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());
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user