public static Specification createSpecification()

in service/src/main/java/org/apache/fineract/cn/accounting/service/internal/repository/specification/AccountSpecification.java [34:76]


  public static Specification<AccountEntity> createSpecification(
      final boolean includeClosed, final String term, final String type, final boolean includeCustomerAccounts) {

    return (root, query, cb) -> {

      final ArrayList<Predicate> predicates = new ArrayList<>();

      if (!includeClosed) {
        predicates.add(
            root.get("state").in(
                Account.State.OPEN.name(),
                Account.State.LOCKED.name()
            )
        );
      }

      if (term != null) {
        final String likeExpression = "%" + term + "%";
        predicates.add(
            cb.or(
                cb.like(root.get("identifier"), likeExpression),
                cb.like(root.get("name"), likeExpression),
                cb.like(root.get("alternativeAccountNumber"), likeExpression)
            )
        );
      }

      if (type != null) {
        predicates.add(cb.equal(root.get("type"), type));
      }

      if (!includeCustomerAccounts) {
        predicates.add(
            cb.or(
                cb.equal(root.get("holders"), ""),
                cb.isNull(root.get("holders"))
            )
        );
      }

      return cb.and(predicates.toArray(new Predicate[predicates.size()]));
    };
  }