Class CriteriaTranslatorImpl
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 Summary
FieldsModifier and TypeFieldDescriptionprotected SecurityVerifierprotected List<CriteriaTranslatorEventHandler>protected RowLevelSecurityService -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidprotected voidaddSorting(jakarta.persistence.criteria.CriteriaBuilder criteriaBuilder, List<jakarta.persistence.criteria.Order> sorts, FilterMapping filterMapping, jakarta.persistence.criteria.Path<?> path) protected Class<Serializable>ceilingMarker(String ceilingEntity, List<FilterMapping> filterMappings) protected Class<Serializable>classByName(String className) protected Class<Serializable>determineRoot(DynamicEntityDao dynamicEntityDao, Class<Serializable> ceilingMarker, List<FilterMapping> filterMappings) Determines the appropriate entity in this current class tree to use as the ceiling entity for the query.protected ClassTreedetermineRootInternal(ClassTree root, List<ClassTree> parents, Class<?> classToCheck) Because of the restriction described indetermineRoot(DynamicEntityDao, Class, List), we must check that a class lies inside of the same tree as the current known root.protected jakarta.persistence.criteria.Path<?>explicitPath(FilterMapping filterMapping, jakarta.persistence.criteria.CriteriaBuilder criteriaBuilder, jakarta.persistence.criteria.Root<?> original) protected ObjectgetAppropriateLargeSortingValue(Class<?> javaType) 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) jakarta.persistence.TypedQuery<Serializable>translateCountQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings) jakarta.persistence.TypedQuery<Serializable>translateMaxQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings, String maxField) jakarta.persistence.TypedQuery<Serializable>translateQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings, Integer firstResult, Integer maxResults)
-
Field Details
-
eventHandlers
-
rowSecurityService
-
adminSecurityService
-
-
Constructor Details
-
CriteriaTranslatorImpl
public CriteriaTranslatorImpl()
-
-
Method Details
-
translateCountQuery
public jakarta.persistence.TypedQuery<Serializable> translateCountQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings) - Specified by:
translateCountQueryin interfaceCriteriaTranslator
-
translateMaxQuery
public jakarta.persistence.TypedQuery<Serializable> translateMaxQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings, String maxField) - Specified by:
translateMaxQueryin interfaceCriteriaTranslator
-
translateQuery
public jakarta.persistence.TypedQuery<Serializable> translateQuery(DynamicEntityDao dynamicEntityDao, String ceilingEntity, List<FilterMapping> filterMappings, Integer firstResult, Integer maxResults) - Specified by:
translateQueryin interfaceCriteriaTranslator
-
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 indetermineRoot(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
-
addPaging
-
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
-