public List findUsersByQuery()

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();
    }