package org.infinispan.objectfilter;

import java.util.Comparator;

/**
 * A subscription for match notifications.
 *
 * @author anistor@redhat.com
 * @since 7.0
 */
public interface FilterSubscription {

   /**
    * The fully qualified entity type name accepted by this filter.
    */
   String getEntityTypeName();

   /**
    * The associated callback that is being notified of successful matches.
    */
   FilterCallback getCallback();

   boolean isDeltaFilter();

   /**
    * The array of '.' separated path names of the projected fields if any, or {@code null} otherwise.
    */
   String[] getProjection();

   /**
    * The array of sort specifications if defined, or {@code null} otherwise.
    */
   SortField[] getSortFields();

   /**
    * The comparator corresponding to the 'order by' clause, if any.
    *
    * @return the Comparator or {@code null} if no 'order by' was specified
    */
   Comparator<Comparable<?>[]> getComparator();

   /**
    * The event types.
    *
    * @return the array of event types or null
    */
   Object[] getEventTypes();
}
