/** * Gets the all predicates. * * @param criteriaBuilder the criteria builder * @return the all predicates */ public Predicate[] getAllPredicates(CriteriaBuilder criteriaBuilder) { List<Predicate> allPredicates = new ArrayList<Predicate>(); for (PredicateGroup predicateGroup : predicates.values()) { List<Predicate> andPredicates = predicateGroup.getAndPredicates(); if (!andPredicates.isEmpty()) { allPredicates.add( criteriaBuilder.and(andPredicates.toArray(new Predicate[andPredicates.size()]))); } List<Predicate> orPredicates = predicateGroup.getOrPredicates(); if (!orPredicates.isEmpty()) { allPredicates.add( criteriaBuilder.or(orPredicates.toArray(new Predicate[orPredicates.size()]))); } } if (!andWithOrPredicates.isEmpty()) { List<Predicate> allAndOrPredicates = new ArrayList<Predicate>(); for (PredicateGroup predicateGroup : andWithOrPredicates.values()) { List<Predicate> andPredicates = predicateGroup.getAndPredicates(); allAndOrPredicates.add( criteriaBuilder.and(andPredicates.toArray(new Predicate[andPredicates.size()]))); } allPredicates.add( criteriaBuilder.or(allAndOrPredicates.toArray(new Predicate[allAndOrPredicates.size()]))); } return allPredicates.toArray(new Predicate[allPredicates.size()]); }
/** * Adds the or predicate. * * @param index the index * @param predicate the predicate */ public void addOrPredicate(int index, Predicate predicate) { PredicateGroup predicateGroup = predicates.get(index); if (predicateGroup == null) { predicateGroup = new PredicateGroup(); predicates.put(index, predicateGroup); } predicateGroup.addOrPredicate(predicate); }
/** * Adds the and separated by or. * * @param index the index * @param predicate the predicate */ public void addAndSeparatedByOr(int index, Predicate predicate) { PredicateGroup predicateGroup = andWithOrPredicates.get(index); if (predicateGroup == null) { predicateGroup = new PredicateGroup(); andWithOrPredicates.put(index, predicateGroup); } predicateGroup.addAndPredicate(predicate); }