java.lang.Object
org.broadleafcommerce.openadmin.server.service.persistence.module.criteria.CriteriaTranslatorImpl
All Implemented Interfaces:
CriteriaTranslator

@Service("blCriteriaTranslator") public class CriteriaTranslatorImpl extends Object implements CriteriaTranslator
Author:
Jeff Fischer
  • Field Details

  • Constructor Details

    • CriteriaTranslatorImpl

      public CriteriaTranslatorImpl()
  • Method Details

    • translateCountQuery

      public jakarta.persistence.TypedQuery<Serializable> translateCountQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings)
      Specified by:
      translateCountQuery in interface CriteriaTranslator
    • translateMaxQuery

      public jakarta.persistence.TypedQuery<Serializable> translateMaxQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings, String maxField)
      Specified by:
      translateMaxQuery in interface CriteriaTranslator
    • translateQuery

      public jakarta.persistence.TypedQuery<Serializable> translateQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings, Integer firstResult, Integer maxResults)
      Specified by:
      translateQuery in interface CriteriaTranslator
    • determineRoot

      protected Class<Serializable> determineRoot(DynamicEntityDao dynamicEntityDao, Class<Serializable> ceilingMarker, List<FilterMapping> filterMappings) throws org.broadleafcommerce.common.exception.NoPossibleResultsException
      Determines the appropriate entity in this current class tree to use as the ceiling entity for the query. Because we filter with AND instead of OR, we throw an exception if an attempt to utilize properties from mutually exclusive class trees is made as it would be impossible for such a query to return results.
      Parameters:
      dynamicEntityDao -
      ceilingMarker -
      filterMappings -
      Returns:
      the root class
      Throws:
      org.broadleafcommerce.common.exception.NoPossibleResultsException
    • determineRootInternal

      protected ClassTree determineRootInternal(ClassTree root, List<ClassTree> parents, Class<?> classToCheck)
      Because of the restriction described in determineRoot(DynamicEntityDao, Class, List), we must check that a class lies inside of the same tree as the current known root. Consider the following situation:

      Class C extends Class B, which extends Class A. Class E extends Class D, which also extends Class A.

      We can allow filtering on properties that are either all in C/B/A or all in E/D/A. Filtering on properties across C/B and E/D will always produce no results given an AND style of joining the filtered properties.

      Parameters:
      root -
      parents -
      classToCheck -
      Returns:
      the (potentially new) root or null if invalid
    • ceilingMarker

      protected Class<Serializable> ceilingMarker(String ceilingEntity, List<FilterMapping> filterMappings)
    • classByName

      protected Class<Serializable> classByName(String className)
    • addPaging

      protected void addPaging(jakarta.persistence.Query response, Integer firstResult, Integer maxResults)
    • restrictions

      protected List<jakarta.persistence.criteria.Predicate> restrictions(String ceilingEntity, List<FilterMapping> filterMappings, jakarta.persistence.criteria.CriteriaBuilder criteriaBuilder, jakarta.persistence.criteria.Root<?> original, List<jakarta.persistence.criteria.Order> sorts, jakarta.persistence.criteria.CriteriaQuery<?> criteria)
    • explicitPath

      protected jakarta.persistence.criteria.Path<?> explicitPath(FilterMapping filterMapping, jakarta.persistence.criteria.CriteriaBuilder criteriaBuilder, jakarta.persistence.criteria.Root<?> original)
    • addSorting

      protected void addSorting(jakarta.persistence.criteria.CriteriaBuilder criteriaBuilder, List<jakarta.persistence.criteria.Order> sorts, FilterMapping filterMapping, jakarta.persistence.criteria.Path<?> path)
    • getAppropriateLargeSortingValue

      protected Object getAppropriateLargeSortingValue(Class<?> javaType)