Interface ClassifyDataProvider
- All Known Implementing Classes:
AbstractClassifyDataProvider,BigDecimalValueProvider,BooleanValueProvider,DateTimeValueProvider,DateValueProvider,DictionaryValueProvider,EnumValueProvider,LongValueProvider,LovValueProvider,MultiFieldValueProvider,MultisourceValueProvider,StringValueProvider,TimeValueProvider
public interface ClassifyDataProvider
-
Method Summary
Modifier and TypeMethodDescriptiongetClassifyDataParameters(Field dtoField, FilterParameter filterParam, SearchParameter searchParam, List<ClassifyDataProvider> providers) default jakarta.persistence.criteria.PredicategetFilterPredicate(@NonNull SearchOperation operator, @NonNull jakarta.persistence.criteria.Root<?> root, @NonNull jakarta.persistence.criteria.CriteriaBuilder cb, @NonNull ClassifyDataParameter criteria, @NonNull jakarta.persistence.criteria.Path field, @NonNull Object value, @NonNull DialectName dialect) Retrieves a filter predicate based on the provided search operation and criteria.default jakarta.persistence.criteria.Expression<?>getSortExpression(@NonNull SearchParameter searchParameter, @NonNull jakarta.persistence.criteria.CriteriaBuilder builder, @NonNull jakarta.persistence.criteria.CriteriaQuery query, @NonNull jakarta.persistence.criteria.Root<?> root, @NonNull Class dtoClazz, @NonNull jakarta.persistence.criteria.Path fieldPath, @NonNull DialectName dialect) Retrieves a sort expression based on the provided search parameter and criteria.
-
Method Details
-
getClassifyDataParameters
List<ClassifyDataParameter> getClassifyDataParameters(Field dtoField, FilterParameter filterParam, SearchParameter searchParam, List<ClassifyDataProvider> providers) - Parameters:
dtoField- DTO field to search or sort byfilterParam- Filter parameter that defines the type of operation and the values to filtersearchParam- Search parameter annotation that provides search meta informationproviders- all Classify Data Providers providing Classify Data Parameters- Returns:
- Classify Data Parameters for defining of predicates of searching data in Persistence Layer
-
getFilterPredicate
default jakarta.persistence.criteria.Predicate getFilterPredicate(@NonNull @NonNull SearchOperation operator, @NonNull @NonNull jakarta.persistence.criteria.Root<?> root, @NonNull @NonNull jakarta.persistence.criteria.CriteriaBuilder cb, @NonNull @NonNull ClassifyDataParameter criteria, @NonNull @NonNull jakarta.persistence.criteria.Path field, @NonNull @NonNull Object value, @NonNull @NonNull DialectName dialect) Retrieves a filter predicate based on the provided search operation and criteria.Override this method in implementing classes to provide custom filtering logic. Default implementation returns null (no filtering).
Example for LocalTime filtering:
if (value instanceof LocalTime) { Expression<?> timeExpr = getExpressionByTimePart(field, cb, dialect); Comparable<?> comparableValue = MetadataUtils.requireComparable(value); switch (operator) { case EQUALS: return cb.equal(timeExpr, comparableValue); case GREATER_OR_EQUAL_THAN: return cb.greaterThanOrEqualTo(timeExpr, comparableValue); case LESS_OR_EQUAL_THAN: return cb.lessThanOrEqualTo(timeExpr, comparableValue); default: return null; } } return null;This method is intended to be overridden in the implementing class (Provider) if custom sorting logic is required. If this method is not implemented, the default sorting mechanism will be used.
-
getSortExpression
default jakarta.persistence.criteria.Expression<?> getSortExpression(@NonNull @NonNull SearchParameter searchParameter, @NonNull @NonNull jakarta.persistence.criteria.CriteriaBuilder builder, @NonNull @NonNull jakarta.persistence.criteria.CriteriaQuery query, @NonNull @NonNull jakarta.persistence.criteria.Root<?> root, @NonNull @NonNull Class dtoClazz, @NonNull @NonNull jakarta.persistence.criteria.Path fieldPath, @NonNull @NonNull DialectName dialect) Retrieves a sort expression based on the provided search parameter and criteria.Override this method to provide custom sorting logic. Default returns null (default sorting).
Example for time value sorting:
if (searchParameter.provider() == TimeValueProvider.class) { return dialect == DialectName.ORACLE ? builder.function("TO_CHAR", String.class, fieldPath, builder.literal("HH24:MI:SS")) : fieldPath.as(LocalTime.class); } return null;This method is intended to be overridden in the implementing class (Provider) if custom sorting logic is required. If this method is not implemented, the default sorting mechanism will be used.
-