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 Type
    Method
    Description
    getClassifyDataParameters(Field dtoField, FilterParameter filterParam, SearchParameter searchParam, List<ClassifyDataProvider> providers)
     
    default jakarta.persistence.criteria.Predicate
    getFilterPredicate(@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 by
      filterParam - Filter parameter that defines the type of operation and the values to filter
      searchParam - Search parameter annotation that provides search meta information
      providers - 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.