in src/main/java/com/amazon/photosharing/iface/ServiceFacade.java [88:146]
public synchronized <T> ListResponse<T> list(ListRequest<T> p_request) {
CriteriaBuilder builder = em().getCriteriaBuilder();
CriteriaQuery<T> search = builder.createQuery(p_request.getType());
CriteriaQuery<Long> count = builder.createQuery(Long.class);
Root<T> root = search.from(p_request.getType());
count.select(builder.count(root));
count.from(p_request.getType());
search.select(root);
Predicate or_predicate = getFilterPredicate(builder::or, root, builder, p_request.getORFilter());
Predicate and_predicate = getFilterPredicate(builder::and, root, builder, p_request.getANDFilter());
Predicate member_predicate = getIsMemberOfPredicate(root, builder, p_request.getMemberFilter());
Predicate filter_predicate = null;
if (and_predicate != null && or_predicate != null)
filter_predicate = builder.and(and_predicate, or_predicate);
else if (and_predicate != null)
filter_predicate = and_predicate;
else if (or_predicate != null)
filter_predicate = or_predicate;
if (member_predicate != null) {
if (filter_predicate != null)
filter_predicate = builder.and(filter_predicate, member_predicate);
else
filter_predicate = member_predicate;
}
if (filter_predicate != null) {
search.where(filter_predicate);
count.where(filter_predicate);
}
List<Order> order = getSort(root, builder, p_request.getSort());
if (order.size() > 0) {
search.orderBy(order);
}
List<T> results = em().createQuery(search)
.setHint("org.hibernate.cacheable", p_request.getCachable())
.setFirstResult(p_request.getFirst())
.setMaxResults(p_request.getMax())
.getResultList();
Long total = em().createQuery(count)
.setHint("org.hibernate.cacheable", p_request.getCachable())
.getSingleResult();
done();
return new ListResponse<T>(results, p_request.getFirst(), p_request.getMax(), total.intValue());
}