Class ListenersHelper<ListenerType,​EventType>

java.lang.Object
xyz.cofe.ecolls.ListenersHelper<ListenerType,​EventType>
Type Parameters:
ListenerType - Тип издателья
EventType - Тип подписчика
All Implemented Interfaces:
GetReadLock, GetWriteLock, ReadWriteLockProperty, ReadWriteLockSupport

public class ListenersHelper<ListenerType,​EventType>
extends java.lang.Object
implements ReadWriteLockSupport, ReadWriteLockProperty
Помошник в реализации Listener.
Обеспечивает синхронность при вызове методов:
  • getListeners
  • addListener
  • removeListener
  • fireEvent
Умеет хранить как hard так и soft ссылки на listener-ы.
Отдельно стоит посмотреть на ImmediateEvent.
Author:
Kamnev Georgiy ([email protected])
  • Field Summary

    Fields 
    Modifier and Type Field Description
    protected java.util.function.BiConsumer<ListenerType,​EventType> callListener
    Функция вызывающая listener.method( collectionEvent );
    protected java.util.concurrent.atomic.AtomicInteger eventBlockLevel  
    protected java.util.HashSet<ListenerType> listeners
    Hard ссылки на подписчиков
    protected java.util.Map<ListenerType,​java.lang.Integer> listenersCalls
    Кол-во вызовов подписчиков
    protected java.util.WeakHashMap<ListenerType,​java.lang.Object> weakListeners
    Soft/Weak ссылки на подписчиков
    protected java.util.Map<ListenerType,​java.lang.Integer> weakListenersCalls
    Кол-во вызовов подписчиков
  • Constructor Summary

    Constructors 
    Constructor Description
    ListenersHelper​(java.util.function.BiConsumer<ListenerType,​EventType> callListFunc)
    Конструктор.
    ListenersHelper​(java.util.function.BiConsumer<ListenerType,​EventType> callListFunc, java.util.concurrent.locks.ReadWriteLock rwLocks)
    Конструктор.
  • Method Summary

    Modifier and Type Method Description
    void addEvent​(EventType ev)
    Добавляет событие в очередь
    java.lang.AutoCloseable addListener​(ListenerType listener)
    Добавление подписчика.
    java.lang.AutoCloseable addListener​(ListenerType listener, boolean weakLink)
    Добавление подписчика.
    java.lang.AutoCloseable addListener​(ListenerType listener, boolean weakLink, int limitCalls)
    Добавление подписчика.
    void fireEvent​(EventType event)
    Рассылка уведомления подписчикам
    static <LS,​ EV> ListenersHelper<LS,​EV> get​(java.lang.Class cls, java.lang.Object inst, java.util.function.BiConsumer<LS,​EV> invoker)
    Поддержка в реализации подписчиков на события
    java.util.concurrent.ConcurrentLinkedQueue<EventType> getEventQueue()
    Очередь событий
    java.util.Set<ListenerType> getListeners()
    Получение списка подписчиков
    java.util.concurrent.locks.Lock getReadLock()
    Возвращает блокировку чтения
    java.util.concurrent.locks.Lock getWriteLock()
    Возвращает блокировку записи
    boolean hasListener​(ListenerType listener)
    Проверка наличия подписчика в списке обработки
    void removeAllListeners()  
    void removeListener​(ListenerType listener)
    Удаление подписчика из списка обработки
    void runEventQueue()
    Отправляет события из очереди подписчикам
    void withQueue​(java.lang.Runnable run)
    Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода
    <T> T withQueue​(java.util.function.Supplier<T> run)
    Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface xyz.cofe.ecolls.ReadWriteLockProperty

    getReadWriteLock, setReadWriteLock

    Methods inherited from interface xyz.cofe.ecolls.ReadWriteLockSupport

    readLock, readLock, writeLock, writeLock
  • Field Details

    • callListener

      protected java.util.function.BiConsumer<ListenerType,​EventType> callListener
      Функция вызывающая listener.method( collectionEvent );
    • listenersCalls

      protected final java.util.Map<ListenerType,​java.lang.Integer> listenersCalls
      Кол-во вызовов подписчиков
    • weakListenersCalls

      protected final java.util.Map<ListenerType,​java.lang.Integer> weakListenersCalls
      Кол-во вызовов подписчиков
    • listeners

      protected java.util.HashSet<ListenerType> listeners
      Hard ссылки на подписчиков
    • weakListeners

      protected java.util.WeakHashMap<ListenerType,​java.lang.Object> weakListeners
      Soft/Weak ссылки на подписчиков
    • eventBlockLevel

      protected final java.util.concurrent.atomic.AtomicInteger eventBlockLevel
  • Constructor Details

    • ListenersHelper

      public ListenersHelper​(java.util.function.BiConsumer<ListenerType,​EventType> callListFunc)
      Конструктор. По умолчанию синхронизация включена, объект по которому происходит синх - this.
      Parameters:
      callListFunc - Функция вызывающая listener.method( collectionEvent );
    • ListenersHelper

      public ListenersHelper​(java.util.function.BiConsumer<ListenerType,​EventType> callListFunc, java.util.concurrent.locks.ReadWriteLock rwLocks)
      Конструктор.
      Parameters:
      callListFunc - Функция вызывающая listener.method( collectionEvent );
      rwLocks - Блокировки чтения/записи
  • Method Details

    • getReadLock

      public java.util.concurrent.locks.Lock getReadLock()
      Description copied from interface: ReadWriteLockSupport
      Возвращает блокировку чтения
      Specified by:
      getReadLock in interface GetReadLock
      Specified by:
      getReadLock in interface ReadWriteLockProperty
      Specified by:
      getReadLock in interface ReadWriteLockSupport
      Returns:
      блокировка чтения
    • getWriteLock

      public java.util.concurrent.locks.Lock getWriteLock()
      Description copied from interface: ReadWriteLockSupport
      Возвращает блокировку записи
      Specified by:
      getWriteLock in interface GetWriteLock
      Specified by:
      getWriteLock in interface ReadWriteLockProperty
      Specified by:
      getWriteLock in interface ReadWriteLockSupport
      Returns:
      блокировка записи
    • hasListener

      public boolean hasListener​(ListenerType listener)
      Проверка наличия подписчика в списке обработки
      Parameters:
      listener - подписчик
      Returns:
      true - есть в списке обработки
    • getListeners

      public java.util.Set<ListenerType> getListeners()
      Получение списка подписчиков
      Returns:
      подписчики
    • addListener

      public java.lang.AutoCloseable addListener​(ListenerType listener)
      Добавление подписчика.
      Parameters:
      listener - Подписчик.
      Returns:
      Интерфес для отсоединения подписчика
    • addListener

      public java.lang.AutoCloseable addListener​(ListenerType listener, boolean weakLink)
      Добавление подписчика.
      Parameters:
      listener - Подписчик.
      weakLink - true - добавить как weak ссылку / false - как hard ссылку
      Returns:
      Интерфес для отсоединения подписчика
    • addListener

      public java.lang.AutoCloseable addListener​(ListenerType listener, boolean weakLink, int limitCalls)
      Добавление подписчика.
      Parameters:
      listener - Подписчик.
      weakLink - true - добавить как weak ссылку / false - как hard ссылку
      limitCalls - Ограничение кол-ва вызовов, 0 или меньше - нет ограничений
      Returns:
      Интерфес для отсоединения подписчика
    • removeListener

      public void removeListener​(ListenerType listener)
      Удаление подписчика из списка обработки
      Parameters:
      listener - подписчик
    • removeAllListeners

      public void removeAllListeners()
    • withQueue

      public void withQueue​(java.lang.Runnable run)
      Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода
      Parameters:
      run - блок кода
    • withQueue

      public <T> T withQueue​(java.util.function.Supplier<T> run)
      Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода
      Type Parameters:
      T - тип возвращаемого занчения из блока
      Parameters:
      run - блок кода
      Returns:
      возвращаемое значение
    • fireEvent

      public void fireEvent​(EventType event)
      Рассылка уведомления подписчикам
      Parameters:
      event - уведомление
    • getEventQueue

      public java.util.concurrent.ConcurrentLinkedQueue<EventType> getEventQueue()
      Очередь событий
      Returns:
      Очередь событий
    • addEvent

      public void addEvent​(EventType ev)
      Добавляет событие в очередь
      Parameters:
      ev - событие
    • runEventQueue

      public void runEventQueue()
      Отправляет события из очереди подписчикам
    • get

      public static <LS,​ EV> ListenersHelper<LS,​EV> get​(java.lang.Class cls, java.lang.Object inst, java.util.function.BiConsumer<LS,​EV> invoker)
      Поддержка в реализации подписчиков на события
      Type Parameters:
      LS - Тип подписчика
      EV - Тип уведомления
      Parameters:
      cls - Класс/интерфейс реализующий логику работы
      inst - Экземпляр класса/интерфейса
      invoker - Функция передачи уведомления подписчику
      Returns:
      Помошник в реализции Listener