in redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java [205:255]
public List<? extends User> findUsersByQuery(final UserQuery queryParam) throws UserManagerException {
final EntityManager em = getEm();
final JpaUserQuery query = (JpaUserQuery)queryParam;
String orderByAttribute;
if (UserQuery.ORDER_BY_EMAIL.equals(query.getOrderBy())) {
orderByAttribute="email";
} else if (UserQuery.ORDER_BY_FULLNAME.equals(query.getOrderBy())) {
orderByAttribute="fullName";
} else if (UserQuery.ORDER_BY_USERNAME.equals(query.getOrderBy())) {
orderByAttribute="username";
} else {
throw new IllegalArgumentException("Unknown order attribute "+query.getOrderBy());
}
StringBuilder sb = new StringBuilder("SELECT u FROM JpaUser u ");
if (query.hasUsername()||query.hasFullName()||query.hasEmail()) {
sb.append("WHERE ");
}
boolean checkBefore = false;
if (query.hasUsername()) {
sb.append("LOWER(u.username) LIKE :username ");
checkBefore=true;
}
if (query.hasEmail()) {
if (checkBefore) {
sb.append("AND ");
}
checkBefore=true;
sb.append("LOWER(u.email) LIKE :email ");
}
if (query.hasFullName()) {
if (checkBefore) {
sb.append("AND ");
}
sb.append("LOWER(u.fullName) LIKE :fullname ");
}
if (query.getOrderBy()!=null && !"".equals(query.getOrderBy())) {
sb.append("ORDER BY u.").append(orderByAttribute).append(query.isAscending() ? " ASC" : " DESC");
}
TypedQuery<User> q = em.createQuery(sb.toString(), User.class);
if (query.hasUsername()) {
q.setParameter("username", "%"+query.getUsername().toLowerCase()+"%");
}
if (query.hasEmail()) {
q.setParameter("email", "%"+query.getEmail().toLowerCase()+"%");
}
if (query.hasFullName()) {
q.setParameter("fullname", "%"+query.getFullName().toLowerCase()+"%");
}
q.setFirstResult((int)query.getFirstResult()).setMaxResults((int)query.getMaxResults());
return q.getResultList();
}