package org.infinispan.commons.api.query;

/**
 * @since 15.0
 */
public interface ContinuousQueryListener<K, V> {

   /**
    * Receives notification that a cache entry has joined the matching set. This is invoked initially when receiving the
    * existing entries that match the query and subsequently whenever a previously non-matching entry is updated and
    * starts to match.
    *
    * @param key   the key of the joining entry
    * @param value the joining entry or the Object[] projection if a projection was specified
    */
   default void resultJoining(K key, V value) {
   }

   /**
    * Receives notification that a cache entry from the matching set was updated and continues to match the query. The
    * modified attributes causing this update are not necessarily part of the query.
    *
    * @param key   the key of the joining entry
    * @param value the joining entry or the Object[] projection if specified
    */
   default void resultUpdated(K key, V value) {
   }

   /**
    * Receives notification that a cache entry has left the matching set. This can happen due to an update or removal.
    *
    * @param key the key of the leaving entry
    */
   default void resultLeaving(K key) {
   }

}
