Hi all,
As we have discussed https://issues.apache.org/jira/browse/DIRKRB-295 ,
IdentityService.getIdentities() should be removed. However, to implement
getIdentities(int start, int limit), which returns a sorted result, I have to
get all identities from the ldap server and then sort them. Is it possible for
the Ldap server to return a sorted result for the client connection?
In [1], I see a test about Page Search on client side
testPagedSearchWrongCookie(), and it uses pagedSearchControl.setSize(3) to set
the page size, the problem are:
*how can I get a search result based on the start index and pageSize,
like I may use getIdentities(int start, int limit) to return a result;
*how can I get a sorted result from the server, so that I don't have to
get all the entries and then sort them to get the result;
[1]
https://svn.apache.org/repos/asf/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/PagedSearchIT.java
public List<String> getIdentities(int start, int limit) {
List<String> identities = getIdentities();
if (limit == -1) {
return identities;
}
return getIdentities().subList(start, start + limit);
}
private List<String> getIdentities() {
List<String> identityNames = new ArrayList<>();
EntryCursor cursor;
Entry entry;
try {
cursor = connection.search( getConfig().getString("base_dn"),
"(objectclass=*)", SearchScope.ONELEVEL,
KerberosAttribute.KRB5_PRINCIPAL_NAME_AT);
if (cursor == null) {
return null;
}
while (cursor.next()) {
entry = cursor.get();
identityNames.add(entry.get(KerberosAttribute.KRB5_PRINCIPAL_NAME_AT).getString());
}
cursor.close();
Collections.sort(identityNames);
} catch (LdapException e) {
e.printStackTrace();
} catch (CursorException e) {
e.printStackTrace();
}
return identityNames;
}
Regards,
Yaning