How to find paginated list of all users who belongs to the given group
We have a requirement of building functionality to show paginated list of users by the given filter criteria. Some of the filter criteria we have already achived by directly querying users from /home/users.
We are facing difficulty in two filter criteria
1) Find user by group name
2) Find user by directory read access.
We are unable to create query or anything that can support this requirement and returns paginated list of users. Following is our code so far.
StringBuilder queryBuilder = new StringBuilder("SELECT * FROM [rep:User] AS u WHERE ISDESCENDANTNODE(u, [/home/users])");
if (StringUtils.isNotBlank(criteria.getUserId())) {
queryBuilder.append(" AND (u.[rep:principalName] LIKE \"%").append(criteria.getUserId().trim()).append("%\")");
}
if (StringUtils.isNotBlank(criteria.getUserMail())) {
queryBuilder.append(" AND (u.[profile/email] LIKE \"%").append(criteria.getUserMail().trim()).append("%\")");
}
if (StringUtils.isNotBlank(criteria.getCompanyName())) {
queryBuilder.append(" AND (u.[profile/companyName] LIKE \"%").append(criteria.getCompanyName().trim()).append("%\")");
}
if(StringUtils.isNotBlank(criteria.getGroup())){
//TODO: filter by group
}
String query = queryBuilder.toString();
ResourceResolver resolver = resourceResolverService.getWritableResourceResolver();
Session readingSession = resolver.adaptTo(Session.class);
QueryManager qm = readingSession.getWorkspace().getQueryManager();
Query q = qm.createQuery(query, Query.JCR_SQL2);
q.setLimit(10);
q.setOffset(0);
QueryResult result = q.execute();