
ro.andreimatei.querydsl.QueryDSLPredicatesBuilder Maven / Gradle / Ivy
package ro.andreimatei.querydsl;
import com.querydsl.core.types.dsl.BooleanExpression;
import ro.andreimatei.querydsl.exceptions.QueryDSLPredicateBuildException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Andrei-Vlad Matei
*/
public final class QueryDSLPredicatesBuilder {
private final List params;
private final Class entityClass;
public QueryDSLPredicatesBuilder(Class entityClass) {
this.params = new ArrayList<>();
this.entityClass = entityClass;
}
public QueryDSLPredicatesBuilder with(final String key, final String operation, final Object value) {
params.add(new SearchCriteria(key, operation, value));
return this;
}
public QueryDSLPredicatesBuilder with(final String search) {
Pattern pattern = Pattern.compile("([^,]+?)(:|!|<|>)([^,]+?),");
Matcher matcher = pattern.matcher(search + ",");
while (matcher.find()) {
this.with(matcher.group(1), matcher.group(2), matcher.group(3));
}
return this;
}
public BooleanExpression build() throws QueryDSLPredicateBuildException {
if (params.size() == 0) {
return null;
}
final List predicates = new ArrayList<>();
QueryDSLPredicate predicate;
for (final SearchCriteria param : params) {
predicate = new QueryDSLPredicate<>(param);
final BooleanExpression exp = predicate.getPredicate(entityClass);
if (exp != null) {
predicates.add(exp);
}
}
BooleanExpression result = predicates.get(0);
for (int i = 1; i < predicates.size(); i++) {
result = result.and(predicates.get(i));
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy