QueryAccounts: Support parameter 'start'
The 'start' query parameter can be supplied to skip a number of accounts from the list. Change-Id: I31497d0db3ac6049a645fe2d29984797bd6cfcae Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
@@ -49,6 +49,9 @@ returned.
|
||||
]
|
||||
----
|
||||
|
||||
The `S` or `start` query parameter can be supplied to skip a number
|
||||
of accounts from the list.
|
||||
|
||||
[[suggest-account]]
|
||||
To get account suggestions set the parameter `suggest` and provide the
|
||||
typed substring as query `q`. If a result limit `n` is not specified,
|
||||
|
||||
@@ -140,6 +140,7 @@ public interface Accounts {
|
||||
abstract class QueryRequest {
|
||||
private String query;
|
||||
private int limit;
|
||||
private int start;
|
||||
|
||||
/**
|
||||
* Executes query and returns a list of accounts.
|
||||
@@ -165,6 +166,15 @@ public interface Accounts {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set number of accounts to skip.
|
||||
* Optional; no accounts are skipped when not provided.
|
||||
*/
|
||||
public QueryRequest withStart(int start) {
|
||||
this.start = start;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getQuery() {
|
||||
return query;
|
||||
}
|
||||
@@ -172,6 +182,10 @@ public interface Accounts {
|
||||
public int getLimit() {
|
||||
return limit;
|
||||
}
|
||||
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -63,6 +63,7 @@ public class QueryAccounts implements RestReadView<TopLevelResource> {
|
||||
private boolean suggest;
|
||||
private int suggestLimit = 10;
|
||||
private String query;
|
||||
private Integer start;
|
||||
|
||||
@Option(name = "--suggest", metaVar = "SUGGEST", usage = "suggest users")
|
||||
public void setSuggest(boolean suggest) {
|
||||
@@ -87,6 +88,12 @@ public class QueryAccounts implements RestReadView<TopLevelResource> {
|
||||
this.query = query;
|
||||
}
|
||||
|
||||
@Option(name = "--start", aliases = {"-S"}, metaVar = "CNT",
|
||||
usage = "Number of accounts to skip")
|
||||
public void setStart(int start) {
|
||||
this.start = start;
|
||||
}
|
||||
|
||||
@Inject
|
||||
QueryAccounts(AccountControl.Factory accountControlFactory,
|
||||
AccountLoader.Factory accountLoaderFactory,
|
||||
@@ -139,6 +146,9 @@ public class QueryAccounts implements RestReadView<TopLevelResource> {
|
||||
if (!suggest) {
|
||||
throw new MethodNotAllowedException();
|
||||
}
|
||||
if (start != null) {
|
||||
throw new MethodNotAllowedException("option start not allowed");
|
||||
}
|
||||
matches = queryFromDb();
|
||||
}
|
||||
|
||||
@@ -151,6 +161,10 @@ public class QueryAccounts implements RestReadView<TopLevelResource> {
|
||||
throw new MethodNotAllowedException("query disabled");
|
||||
}
|
||||
|
||||
if (start != null) {
|
||||
queryProcessor.setStart(start);
|
||||
}
|
||||
|
||||
Map<Account.Id, AccountInfo> matches = new LinkedHashMap<>();
|
||||
try {
|
||||
Predicate<AccountState> queryPred;
|
||||
|
||||
@@ -123,6 +123,7 @@ public class AccountsImpl implements Accounts {
|
||||
QueryAccounts myQueryAccounts = queryAccountsProvider.get();
|
||||
myQueryAccounts.setQuery(r.getQuery());
|
||||
myQueryAccounts.setLimit(r.getLimit());
|
||||
myQueryAccounts.setStart(r.getStart());
|
||||
return myQueryAccounts.apply(TopLevelResource.INSTANCE);
|
||||
} catch (OrmException e) {
|
||||
throw new RestApiException("Cannot retrieve suggested accounts", e);
|
||||
|
||||
@@ -57,6 +57,6 @@ public class AccountQueryProcessor extends QueryProcessor<AccountState> {
|
||||
protected Predicate<AccountState> enforceVisibility(
|
||||
Predicate<AccountState> pred) {
|
||||
return new AndSource<>(pred,
|
||||
new AccountIsVisibleToPredicate(accountControlFactory.get()));
|
||||
new AccountIsVisibleToPredicate(accountControlFactory.get()), start);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -256,6 +256,17 @@ public abstract class AbstractQueryAccountsTest extends GerritServerTests {
|
||||
assertQuery(newQuery(domain).withLimit(2), user1, user2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void withStart() throws Exception {
|
||||
String domain = name("test.com");
|
||||
AccountInfo user1 = newAccountWithEmail("user1", "user1@" + domain);
|
||||
AccountInfo user2 = newAccountWithEmail("user2", "user2@" + domain);
|
||||
AccountInfo user3 = newAccountWithEmail("user3", "user3@" + domain);
|
||||
|
||||
assertQuery(domain, user1, user2, user3);
|
||||
assertQuery(newQuery(domain).withStart(1), user2, user3);
|
||||
}
|
||||
|
||||
protected AccountInfo newAccount(String username) throws Exception {
|
||||
return newAccountWithEmail(username, null);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user