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