in genie-web/src/main/java/com/netflix/genie/web/data/services/impl/jpa/queries/predicates/ApplicationPredicates.java [60:103]
public static Predicate find(
final Root<ApplicationEntity> root,
final AbstractQuery<?> cq,
final CriteriaBuilder cb,
@Nullable final String name,
@Nullable final String user,
@Nullable final Set<String> statuses,
@Nullable final Set<TagEntity> tags,
@Nullable final String type
) {
final List<Predicate> predicates = new ArrayList<>();
if (StringUtils.isNotBlank(name)) {
predicates.add(
PredicateUtils.getStringLikeOrEqualPredicate(cb, root.get(ApplicationEntity_.name), name)
);
}
if (StringUtils.isNotBlank(user)) {
predicates.add(
PredicateUtils.getStringLikeOrEqualPredicate(cb, root.get(ApplicationEntity_.user), user)
);
}
if (statuses != null && !statuses.isEmpty()) {
predicates.add(
cb.or(
statuses
.stream()
.map(status -> cb.equal(root.get(ApplicationEntity_.status), status))
.toArray(Predicate[]::new)
)
);
}
if (tags != null && !tags.isEmpty()) {
final Join<ApplicationEntity, TagEntity> tagEntityJoin = root.join(ApplicationEntity_.tags);
predicates.add(tagEntityJoin.in(tags));
cq.groupBy(root.get(ApplicationEntity_.id));
cq.having(cb.equal(cb.count(root.get(ApplicationEntity_.id)), tags.size()));
}
if (StringUtils.isNotBlank(type)) {
predicates.add(
PredicateUtils.getStringLikeOrEqualPredicate(cb, root.get(ApplicationEntity_.type), type)
);
}
return cb.and(predicates.toArray(new Predicate[0]));
}