Class ListenersHelper<ListenerType,​EventType>

  • Type Parameters:
    ListenerType - Тип издателья
    EventType - Тип подписчика
    All Implemented Interfaces:
    GetReadLock, GetWriteLock, ReadWriteLockProperty, ReadWriteLockSupport

    public class ListenersHelper<ListenerType,​EventType>
    extends Object
    implements ReadWriteLockSupport, ReadWriteLockProperty
    Помошник в реализации Listener.
    Обеспечивает синхронность при вызове методов:
    • getListeners
    • addListener
    • removeListener
    • fireEvent
    Умеет хранить как hard так и soft ссылки на listener-ы.
    Отдельно стоит посмотреть на ImmediateEvent.
    Author:
    Kamnev Georgiy (nt.gocha@gmail.com)
    • Constructor Detail

      • ListenersHelper

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

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

      • hasListener

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

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

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

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

        public 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​(Runnable run)
        Запустить выполнение кода в блоке, и не рассылать уведомления до завершения блока кода
        Parameters:
        run - блок кода
      • withQueue

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

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

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

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

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