package org.infinispan.objectfilter;
/**
* A single-method callback that is specified when registering a filter with a Matcher. The {@link #onFilterResult}
* method is notified of all instances that were presented to {@link Matcher#match} and successfully matched the filter
* associated with this callback. The callback will receive the instance being matched, the projected fields (optional,
* if specified) and the 'order by' projections (optional, if specified). The 'order by' projection is an array of
* {@link java.lang.Comparable} that can be compared using the {@link java.util.Comparator} provided by {@link
* FilterSubscription#getComparator()}.
* <p/>
* Implementations of this interface are provided by the subscriber and must written is such a way that they can be
* invoked from multiple threads simultaneously.
*
* @author anistor@redhat.com
* @since 7.0
*/
@FunctionalInterface
public interface FilterCallback {
/**
* Receives notification that an instance matches the filter.
*
* @param userContext the optional user context object passed to {@link Matcher#match}
* @param eventType the optional event type discriminator object passed to {@link Matcher#match}
* @param instance the object being matched
* @param projection the projection, if a projection was requested or {@code null} otherwise
* @param sortProjection the projection of fields used for sorting, if sorting was requested or {@code null}
* otherwise
*/
void onFilterResult(Object userContext, Object eventType, Object instance, Object[] projection, Comparable[] sortProjection);
}