This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git commit 2bb7e9a4e975b8674bd0978806460b8e899420ba Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Jul 4 17:55:49 2019 +0200 Allow using OR instead of AND when building a query --- .../topia/persistence/HqlAndParametersBuilder.java | 17 +++++++++++++++-- .../java/org/nuiton/topia/persistence/TopiaDao.java | 11 ++++++++++- .../topia/persistence/internal/AbstractTopiaDao.java | 16 +++++++++++++--- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java index 0278ba66..3a0a1b1b 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/HqlAndParametersBuilder.java @@ -38,6 +38,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.text.WordUtils; +import org.nuiton.topia.persistence.pager.FilterRuleGroupOperator; import org.nuiton.util.pagination.PaginationOrder; import java.time.LocalDate; @@ -79,20 +80,31 @@ public class HqlAndParametersBuilder<E extends TopiaEntity> { // List of properties that must be loaded in a single query protected Set<String> fetchProperties = Sets.newLinkedHashSet(); + private final FilterRuleGroupOperator filterRuleGroupOperator; + public HqlAndParametersBuilder(Class<E> entityClass) { - this(entityClass, DEFAULT_ALIAS); + this(entityClass, DEFAULT_ALIAS, FilterRuleGroupOperator.AND); } public HqlAndParametersBuilder(Class<E> entityClass, String alias) { + this(entityClass, alias, FilterRuleGroupOperator.AND); + } + + public HqlAndParametersBuilder(Class<E> entityClass, String alias, FilterRuleGroupOperator filterRuleGroupOperator) { Preconditions.checkArgument(StringUtils.isNotEmpty(alias)); this.entityClass = entityClass; this.alias = alias; + this.filterRuleGroupOperator = filterRuleGroupOperator; } public String getAlias() { return alias; } + public FilterRuleGroupOperator getFilterRuleGroupOperator() { + return filterRuleGroupOperator; + } + public String getHqlSelectClause(boolean includeFetch) { String result = selectClause; if (includeFetch && !CollectionUtils.isEmpty(fetchProperties)) { @@ -581,7 +593,8 @@ public class HqlAndParametersBuilder<E extends TopiaEntity> { String whereClause = Iterables.getOnlyElement(whereClauses); hqlWhereClause = "where " + whereClause; } else { - hqlWhereClause = "where (" + StringUtils.join(whereClauses, ") and (") + ")"; + String hqlOperator = filterRuleGroupOperator == FilterRuleGroupOperator.AND ? "and" : "or"; + hqlWhereClause = "where (" + StringUtils.join(whereClauses, ") " + hqlOperator + " (") + ")"; } return hqlWhereClause; } diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java index 736cec71..ae13b1f0 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/TopiaDao.java @@ -27,6 +27,7 @@ package org.nuiton.topia.persistence; import com.google.common.base.Optional; import org.nuiton.topia.persistence.event.TopiaEntityListener; import org.nuiton.topia.persistence.event.TopiaEntityVetoable; +import org.nuiton.topia.persistence.pager.FilterRuleGroupOperator; import org.nuiton.util.pagination.PaginationResult; import java.util.Collection; @@ -251,7 +252,15 @@ public interface TopiaDao<E extends TopiaEntity> extends Iterable<E> { * @return FIXME * @since 3.0 */ - TopiaQueryBuilderAddCriteriaStep<E> newQueryBuilder(); + default TopiaQueryBuilderAddCriteriaStep<E> newQueryBuilder() { + return newQueryBuilder(FilterRuleGroupOperator.AND); + } + + /** + * @return FIXME + * @since 3.0 + */ + TopiaQueryBuilderAddCriteriaStep<E> newQueryBuilder(FilterRuleGroupOperator filterRuleGroupOperator); /** * @param propertyName FIXME diff --git a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java index cf52297c..6a77eb7a 100644 --- a/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java +++ b/topia-persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaDao.java @@ -56,6 +56,7 @@ import org.nuiton.topia.persistence.event.TopiaEntityListener; import org.nuiton.topia.persistence.event.TopiaEntityVetoable; import org.nuiton.topia.persistence.internal.support.TopiaFiresSupport; import org.nuiton.topia.persistence.internal.support.TopiaHibernateEventListener; +import org.nuiton.topia.persistence.pager.FilterRuleGroupOperator; import org.nuiton.topia.persistence.support.TopiaHibernateSupport; import org.nuiton.topia.persistence.support.TopiaJpaSupport; import org.nuiton.topia.persistence.support.TopiaSqlSupport; @@ -383,11 +384,15 @@ public abstract class AbstractTopiaDao<E extends TopiaEntity> implements TopiaDa } } - protected HqlAndParametersBuilder<E> newHqlAndParametersBuilder() { - HqlAndParametersBuilder<E> result = new HqlAndParametersBuilder<E>(getEntityClass()); + protected HqlAndParametersBuilder<E> newHqlAndParametersBuilder(FilterRuleGroupOperator filterRuleGroupOperator) { + HqlAndParametersBuilder<E> result = new HqlAndParametersBuilder<E>(getEntityClass(), filterRuleGroupOperator); return result; } + protected HqlAndParametersBuilder<E> newHqlAndParametersBuilder() { + return newHqlAndParametersBuilder(FilterRuleGroupOperator.AND); + } + protected HqlAndParametersBuilder<E> getHqlForProperties(String propertyName, Object propertyValue, Object... otherPropertyNamesAndValues) { @@ -457,7 +462,12 @@ public abstract class AbstractTopiaDao<E extends TopiaEntity> implements TopiaDa @Override public InnerTopiaQueryBuilderAddCriteriaOrRunQueryStep<E> newQueryBuilder() { - HqlAndParametersBuilder<E> hqlAndParametersBuilder = newHqlAndParametersBuilder(); + return newQueryBuilder(FilterRuleGroupOperator.AND); + } + + @Override + public InnerTopiaQueryBuilderAddCriteriaOrRunQueryStep<E> newQueryBuilder(FilterRuleGroupOperator filterRuleGroupOperator) { + HqlAndParametersBuilder<E> hqlAndParametersBuilder = newHqlAndParametersBuilder(filterRuleGroupOperator); InnerTopiaQueryBuilderAddCriteriaOrRunQueryStep<E> result = new InnerTopiaQueryBuilderAddCriteriaOrRunQueryStep<E>(this, hqlAndParametersBuilder); return result; } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.