Class EventManager<T>

java.lang.Object
de.bsvrz.dav.daf.main.impl.notification.EventManager<T>

public class EventManager<T>
extends java.lang.Object
Diese Klasse verwaltet eine Menge von Event-Listenern von Typ T, bei denen zwischen internen und öffentlichen/asynchronen Listenern unterschieden wird. Wenn ein Ereignis ausgelöst wird, werden interne Listener im selben Thread ausgelöst der mit postEvent(Consumer) die Benachrichtigung auslöst. Asynchrone EventListener werden im DafMainEventThread asynchron benachrichtigt, sodass der auslösende Thread nicht blockiert werden kann.
  • Interne Eventlistener sollten keine blockierenden Aktionen durchführen.
  • Externe Eventlistener werden u. U. erst verzögert ausgelöst, blockieren aber nicht die ausführung von internen Benachrichtungen. Sie blockieren sich aber ggf. gegenseitig.
  • Constructor Summary

    Constructors
    Constructor Description
    EventManager()
    Erstellt einen neuen EventManager ohne eigenen Dispatch-Thread.
    EventManager​(DafMainEventThread notificationThread)
    Erstellt einen neuen EventManager mit Dispatch-Thread.
  • Method Summary

    Modifier and Type Method Description
    void addAsyncNotificationListener​(T listener)
    Fügt einen Listener hinzu, der die Event-Benachrichtigung asynchron erhält.
    void addInternalNotificationListener​(T listener)
    Fügt einen Listener hinzu, der die Event-Benachrichtigung synchron erhält.
    boolean isEmpty()
    Gibt true zurück, wenn es keine EventListener gibt.
    void postEvent​(java.util.function.Consumer<T> eventGenerator)
    Veröffentlicht ein Ereignis.
    boolean removeAsyncNotificationListener​(T listener)
    Entfernt einen asynchronen Listener.
    boolean removeInternalNotificationListener​(T listener)
    Entfernt einen synchronen Listener.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • EventManager

      public EventManager()
      Erstellt einen neuen EventManager ohne eigenen Dispatch-Thread. Asnychrone Events werden dann gff. jedesmal in einem neuen Thread publiziert.
    • EventManager

      public EventManager​(DafMainEventThread notificationThread)
      Erstellt einen neuen EventManager mit Dispatch-Thread.
      Parameters:
      notificationThread - Event-Thread
  • Method Details

    • addAsyncNotificationListener

      public void addAsyncNotificationListener​(T listener)
      Fügt einen Listener hinzu, der die Event-Benachrichtigung asynchron erhält.
      Parameters:
      listener - Listener
    • removeAsyncNotificationListener

      public boolean removeAsyncNotificationListener​(T listener)
      Entfernt einen asynchronen Listener.
      Parameters:
      listener - zu entfernender Listener
      Returns:
      true wenn entfernt, false falls nicht vorhanden.
    • addInternalNotificationListener

      public void addInternalNotificationListener​(T listener)
      Fügt einen Listener hinzu, der die Event-Benachrichtigung synchron erhält.
      Parameters:
      listener - Listener
    • removeInternalNotificationListener

      public boolean removeInternalNotificationListener​(T listener)
      Entfernt einen synchronen Listener.
      Parameters:
      listener - zu entfernender Listener
      Returns:
      true wenn entfernt, false falls nicht vorhanden.
    • postEvent

      public void postEvent​(java.util.function.Consumer<T> eventGenerator)
      Veröffentlicht ein Ereignis. Als Parameter wird ein Lambda übergeben, der auf einem Listener von Typ T das Ereignis auslöst.

      Diese Methode veröffentlicht zuerst das Ereignis auf den internen Listenern im selben Thread und dann auf den externen Listenern im notificationThread.

      Parameters:
      eventGenerator - Ereignis-Generator
    • isEmpty

      public boolean isEmpty()
      Gibt true zurück, wenn es keine EventListener gibt.
      Returns:
      true, wenn es keine EventListener gibt, sonst false