package fr.openwide.core.jpa.more.business.generic.query; import java.util.Map; import org.apache.lucene.search.SortField; import fr.openwide.core.jpa.more.business.generic.model.EnabledFilter; import fr.openwide.core.jpa.more.business.generic.model.GenericListItem; import fr.openwide.core.jpa.more.business.generic.model.GenericListItemBinding; import fr.openwide.core.jpa.more.business.search.query.AbstractHibernateSearchSearchQuery; import fr.openwide.core.jpa.more.business.sort.ISort; import fr.openwide.core.jpa.more.business.sort.ISort.SortOrder; public abstract class AbstractGenericListItemHibernateSearchSearchQueryImpl < T extends GenericListItem<? super T>, S extends ISort<SortField>, Q extends IGenericListItemSearchQuery<T, S, Q> > extends AbstractHibernateSearchSearchQuery<T, S> implements IGenericListItemSearchQuery<T, S, Q> { @SafeVarargs public AbstractGenericListItemHibernateSearchSearchQueryImpl(Class<? extends T> clazz, S... defaultSorts) { super(clazz, defaultSorts); } @SafeVarargs public AbstractGenericListItemHibernateSearchSearchQueryImpl(Class<? extends T>[] classes, S... defaultSorts) { super(classes, defaultSorts); } @SuppressWarnings("unchecked") protected final Q thisAsQ() { return (Q) this; } @Override public Q label(String label) { must(matchIfGiven( GenericListItem.LABEL_FIELD_NAME, label )); return thisAsQ(); } @Override public Q code(String code) { must(matchIfGiven( GenericListItem.CODE_FIELD_NAME, code )); return thisAsQ(); } @Override public Q enabled(EnabledFilter enabledFilter) { if (enabledFilter != null && !EnabledFilter.ALL.equals(enabledFilter)) { switch (enabledFilter) { case ENABLED_ONLY: must(matchIfGiven(new GenericListItemBinding<>().enabled(), Boolean.TRUE)); break; case DISABLED_ONLY: must(matchIfGiven(new GenericListItemBinding<>().enabled(), Boolean.FALSE)); break; default: throw new IllegalStateException(String.format("Unknown value for EnabledFilter : %s", enabledFilter)); } } return thisAsQ(); } @Override public Q sort(Map<S, SortOrder> sortMap) { super.sort(sortMap); return thisAsQ(); } }