package au.com.vaadinutils.criteriadelegate; import java.util.Map; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.Join; import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; import javax.persistence.metamodel.SingularAttribute; import au.com.vaadinutils.crud.CrudEntity; public abstract class SimplePredicate<ROOT extends CrudEntity, FIELD_TYPE> implements Conditional<ROOT, FIELD_TYPE> { private FIELD_TYPE value; private SingularAttribute<?, FIELD_TYPE> field; public SimplePredicate(SingularAttribute<?, FIELD_TYPE> field, FIELD_TYPE value) { this.field = field; this.value = value; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public Predicate getPredicate(CriterBuilder<ROOT> builder, CriteriaBuilder criteriaBuilder, Map<Class<?>, Join<ROOT, ?>> joins) { Path<FIELD_TYPE> expr = null; Join<ROOT, ?> join = joins.get(field.getDeclaringType().getJavaType()); if (join == null) { expr = builder.entityRoot.get((SingularAttribute) field); } else { expr = join.get((SingularAttribute) field); } return createPredicate(criteriaBuilder, expr, value); } abstract Predicate createPredicate(CriteriaBuilder criteriaBuilder, Path<FIELD_TYPE> expr, FIELD_TYPE value); }