in src/main/java/com/amazon/photosharing/iface/ServiceFacade.java [165:201]
private <T> Predicate getFilterPredicate(Function<Predicate[], Predicate> p_method, Root<T> p_root, CriteriaBuilder p_builder, Filter[] p_filter) {
Predicate predicate = null;
if (p_filter != null && p_filter.length > 0) {
Path<?> property_path = null;
LinkedList<Predicate> predicates = new LinkedList<Predicate>();
for (Filter filter: p_filter) {
for (String hop : filter.getPropertyPath()) {
if (property_path == null)
property_path = p_root.get(hop);
else
property_path = property_path.get(hop);
}
if (filter.getValue() != null) {
if (filter.isExact())
predicates.add(p_builder.equal(property_path, filter.getValue()));
else
predicates.add(p_builder.like((Expression<String>) property_path, filter.getValue()+"%"));
} else {
if (filter.isInverse())
predicates.add(p_builder.isNotNull(property_path));
else
predicates.add(p_builder.isNull(property_path));
}
property_path = null;
}
if (predicates.size() > 1)
predicate = p_method.apply(predicates.toArray(new Predicate[predicates.size()]));
else
predicate = predicates.get(0);
}
return predicate;
}