package edu.gatech.i3l.fhir.jpa.query; import java.math.BigDecimal; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.From; import javax.persistence.criteria.Path; import javax.persistence.criteria.Predicate; import javax.persistence.criteria.Root; import ca.uhn.fhir.model.api.IQueryParameterType; import ca.uhn.fhir.model.dstu.valueset.QuantityCompararatorEnum; import ca.uhn.fhir.rest.param.DateRangeParam; import ca.uhn.fhir.rest.param.ParamPrefixEnum; import edu.gatech.i3l.fhir.jpa.entity.IResourceEntity; public interface PredicateBuilder { Predicate translatePredicateString(Class<? extends IResourceEntity> theResourceEntity, String theParamName, String likeExpression, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom, CriteriaBuilder theBuilder); Predicate translatePredicateDate(Class<? extends IResourceEntity> theResourceEntity, CriteriaBuilder theBuilder, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom, DateRangeParam theRange, String theParamName, IQueryParameterType theParam); Predicate translatePredicateTokenSystem(Class<? extends IResourceEntity> theResourceEntity, String theParamName, String system, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom, CriteriaBuilder theBuilder); Predicate translatePredicateTokenCode(Class<? extends IResourceEntity> theResourceEntity, String theParamName, String code, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom, CriteriaBuilder theBuilder); Predicate translatePredicateQuantityValue(Class<? extends IResourceEntity> theResourceEntity, String theParamName, CriteriaBuilder theBuilder, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom, ParamPrefixEnum cmpValue, BigDecimal valueValue, boolean approx); Predicate translatePredicateQuantityCode(Class<? extends IResourceEntity> theResourceEntity, String theParamName, CriteriaBuilder theBuilder, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom, String unitsValue); Predicate translatePredicateQuantitySystem(Class<? extends IResourceEntity> theResourceEntity, String theParamName, CriteriaBuilder theBuilder, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom, String systemValue); Path<? extends Object> getPath(Class<? extends IResourceEntity> entity, String theParamName, Path<? extends IResourceEntity> theFrom); Predicate addCommonPredicate( CriteriaBuilder theBuilder, From<? extends IResourceEntity, ? extends IResourceEntity> theFrom); Predicate translatePredicateValueNumber(Class<? extends IResourceEntity> myResourceEntity, CriteriaBuilder theBuilder, Root<? extends IResourceEntity> theFrom, String theParamName, ParamPrefixEnum paramPrefixEnum, BigDecimal value); }