Don't suggest inactive accounts

When, for example, adding accounts to a group the drop down list would
also suggest inactive accounts. Exclude the inactive accounts from the
suggestion.

NOTE: suggesting of reviewers doesn't have this issue as this is a
different code. Ideally, suggesting accounts and suggesting reviewers
should be refactored to use the same suggestion algorithm. However,
this would be a larger change and better suited for the master branch.

Change-Id: I6bd22739c326a77dbf6fc3f36ee245d9e6939e34
This commit is contained in:
Saša Živkov
2015-07-17 13:00:59 +02:00
parent 84694cba7d
commit 0575d27ca7

View File

@@ -45,6 +45,7 @@ class SuggestAccounts implements RestReadView<TopLevelResource> {
private final AccountControl accountControl; private final AccountControl accountControl;
private final AccountLoader accountLoader; private final AccountLoader accountLoader;
private final AccountCache accountCache;
private final ReviewDb db; private final ReviewDb db;
private final boolean suggest; private final boolean suggest;
private final int suggestFrom; private final int suggestFrom;
@@ -68,10 +69,12 @@ class SuggestAccounts implements RestReadView<TopLevelResource> {
@Inject @Inject
SuggestAccounts(AccountControl.Factory accountControlFactory, SuggestAccounts(AccountControl.Factory accountControlFactory,
AccountLoader.Factory accountLoaderFactory, AccountLoader.Factory accountLoaderFactory,
AccountCache accountCache,
ReviewDb db, ReviewDb db,
@GerritServerConfig Config cfg) { @GerritServerConfig Config cfg) {
accountControl = accountControlFactory.get(); accountControl = accountControlFactory.get();
accountLoader = accountLoaderFactory.create(true); accountLoader = accountLoaderFactory.create(true);
this.accountCache = accountCache;
this.db = db; this.db = db;
this.suggestFrom = cfg.getInt("suggest", null, "from", 0); this.suggestFrom = cfg.getInt("suggest", null, "from", 0);
@@ -108,12 +111,12 @@ class SuggestAccounts implements RestReadView<TopLevelResource> {
Map<Account.Id, String> queryEmail = new HashMap<>(); Map<Account.Id, String> queryEmail = new HashMap<>();
for (Account p : db.accounts().suggestByFullName(a, b, limit)) { for (Account p : db.accounts().suggestByFullName(a, b, limit)) {
addSuggestion(matches, p.getId()); addSuggestion(matches, p);
} }
if (matches.size() < limit) { if (matches.size() < limit) {
for (Account p : db.accounts() for (Account p : db.accounts()
.suggestByPreferredEmail(a, b, limit - matches.size())) { .suggestByPreferredEmail(a, b, limit - matches.size())) {
addSuggestion(matches, p.getId()); addSuggestion(matches, p);
} }
} }
if (matches.size() < limit) { if (matches.size() < limit) {
@@ -146,11 +149,20 @@ class SuggestAccounts implements RestReadView<TopLevelResource> {
return m; return m;
} }
private boolean addSuggestion(Map<Account.Id, AccountInfo> map, Account.Id id) { private boolean addSuggestion(Map<Account.Id, AccountInfo> map, Account a) {
if (!a.isActive()) {
return false;
}
Account.Id id = a.getId();
if (!map.containsKey(id) && accountControl.canSee(id)) { if (!map.containsKey(id) && accountControl.canSee(id)) {
map.put(id, accountLoader.get(id)); map.put(id, accountLoader.get(id));
return true; return true;
} }
return false; return false;
} }
private boolean addSuggestion(Map<Account.Id, AccountInfo> map, Account.Id id) {
Account a = accountCache.get(id).getAccount();
return addSuggestion(map, a);
}
} }