@Override
public <T extends Any<?>> List<T> search(
final Set<String> adminRealms,
final SearchCond cond,
final int page,
final int itemsPerPage,
final List<OrderByClause> orderBy,
final AnyTypeKind kind) {
if (adminRealms == null || adminRealms.isEmpty()) {
LOG.error("No realms provided");
return Collections.<T>emptyList();
}
LOG.debug("Search condition:\n{}", cond);
if (cond == null || !cond.isValid()) {
LOG.error("Invalid search condition:\n{}", cond);
return Collections.<T>emptyList();
}
List<OrderByClause> effectiveOrderBy;
if (orderBy.isEmpty()) {
OrderByClause keyClause = new OrderByClause();
keyClause.setField(kind == AnyTypeKind.USER ? "username" : "name");
keyClause.setDirection(OrderByClause.Direction.ASC);
effectiveOrderBy = Collections.singletonList(keyClause);
} else {
effectiveOrderBy = orderBy.stream().
filter(clause -> !ArrayUtils.contains(ORDER_BY_NOT_ALLOWED, clause.getField())).
collect(Collectors.toList());
}
return doSearch(adminRealms, cond, page, itemsPerPage, effectiveOrderBy, kind);
}