
org.springframework.data.jpa.datatables.PredicateBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spring-data-jpa-datatables Show documentation
Show all versions of spring-data-jpa-datatables Show documentation
Spring Data JPA extension to work with the great jQuery plug-in DataTables (http://datatables.net/)
package org.springframework.data.jpa.datatables;
import com.querydsl.core.BooleanBuilder;
import com.querydsl.core.types.Predicate;
import com.querydsl.core.types.dsl.PathBuilder;
import org.springframework.data.jpa.datatables.mapping.DataTablesInput;
import java.util.ArrayList;
import java.util.List;
public class PredicateBuilder extends AbstractPredicateBuilder {
private final PathBuilder> entity;
private List columnPredicates = new ArrayList<>();
private List globalPredicates = new ArrayList<>();
public PredicateBuilder(PathBuilder> entity, DataTablesInput input) {
super(input);
this.entity = entity;
}
@Override
public Predicate build() {
initPredicatesRecursively(tree, entity);
if (input.getSearchPanes() != null) {
input.getSearchPanes().forEach((attribute, values) -> {
if (!values.isEmpty()) {
columnPredicates.add(entity.get(attribute).in(values));
}
});
}
return createFinalPredicate();
}
private void initPredicatesRecursively(Node node, PathBuilder> pathBuilder) {
if (node.isLeaf()) {
boolean hasColumnFilter = node.getData() != null;
if (hasColumnFilter) {
Filter columnFilter = node.getData();
columnPredicates.add(columnFilter.createPredicate(pathBuilder, node.getName()));
} else if (hasGlobalFilter) {
Filter globalFilter = tree.getData();
globalPredicates.add(globalFilter.createPredicate(pathBuilder, node.getName()));
}
}
for (Node child : node.getChildren()) {
initPredicatesRecursively(child, child.isLeaf() ? pathBuilder : pathBuilder.get(child.getName()));
}
}
private Predicate createFinalPredicate() {
BooleanBuilder predicate = new BooleanBuilder();
for (Predicate columnPredicate : columnPredicates) {
predicate = predicate.and(columnPredicate);
}
if (!globalPredicates.isEmpty()) {
predicate = predicate.andAnyOf(globalPredicates.toArray(new Predicate[0]));
}
return predicate;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy