private Predicate getFilterPredicate()

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