Class CategorisedListenerSet<L>

java.lang.Object
org.nuiton.util.CategorisedListenerSet<L>
Type Parameters:
L - listener type

public class CategorisedListenerSet<L>
extends java.lang.Object
Objet permettant de géré plusieurs liste de listener de facon simple. Chaque liste de listener est rangé en fonction d'une cle (categorie) Une categorie peut avoir un pere, dans ce cas si un event doit etre lancé sur une categorie il est aussi lancer sur le pere de la categorie. Mais attention l'inverse n'est pas vrai, un event lancé sur un père n'est jamais lancé sur ses fils. Il existe une Category spéciale ALL qui permet d'envoyer un event a tous les listeners. Si cette classe est la derniere classe a conserver l'objet categorie alors la categorie est libere et ainsi que les listeners si c'etait aussi leur derniers referencements

Si les categories sont representees par des Class, alors vous pouvez utiliser la hierachie de classe pour creer de facon automatique les peres.

See Also:
ListenerSet
  • Field Summary

    Fields 
    Modifier and Type Field Description
    static java.lang.Object ALL
    permet de remplacer toutes les categories.
    protected java.util.WeakHashMap<java.lang.Object,​java.lang.Object> categoryParent  
    protected boolean isClassCategory  
    protected java.util.WeakHashMap<java.lang.Object,​ListenerSet<L>> listeners
    HashMap de ListenerSet, en cle l'objet qui caracterise la categorie en valeur un ListenerSet
  • Constructor Summary

    Constructors 
    Constructor Description
    CategorisedListenerSet()
    Empty constructor.
    CategorisedListenerSet​(boolean isClassCategory)  
  • Method Summary

    Modifier and Type Method Description
    void add​(java.lang.Object category, L l)
    Ajoute un listener sur une certaine categorie, si la categorie n'existe alors on la crée en ne lui affectant pas de père
    void addCategory​(java.lang.Object parent, java.lang.Object newCategory)
    Ajoute une categorie en indiquant sont pere.
    protected void checkCategory​(java.lang.Object category)  
    void fire​(java.lang.Object category, java.lang.String methodName)
    Permet de lancer un event dans une categorie, l'event est aussi propagé sur les ancètres de la categorie, si un meme objet etait listener dans plusieurs categories alors il ne recevra qu'une seul notification
    void fire​(java.lang.Object category, java.lang.String methodName, java.lang.Object event)
    Permet de lancer un event dans une categorie, l'event est aussi propagé sur les ancètres de la categorie
    protected ListenerSet<L> getAllListeners​(java.lang.Object category)  
    protected ListenerSet<L> getListeners​(java.lang.Object category)  
    protected ListenerSet<L> getListenersClass​(java.lang.Class<?> category)  
    java.util.Iterator<L> iterator​(java.lang.Object category)
    Retourne un Iterator sur tous les listeners qu'il faut prevenir si on souhaite prevenir une certaine categorie.
    void remove​(java.lang.Object category, L l)
    Supprime un listener d'une categorie, si la categorie ou le listener n'existe pas, rien ne se passe.
    java.lang.String toString()  

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Field Details

    • ALL

      public static final java.lang.Object ALL
      permet de remplacer toutes les categories. Si on utilise cette category, alors tous les listeners present seront utilisé.
    • listeners

      protected java.util.WeakHashMap<java.lang.Object,​ListenerSet<L>> listeners
      HashMap de ListenerSet, en cle l'objet qui caracterise la categorie en valeur un ListenerSet
    • categoryParent

      protected java.util.WeakHashMap<java.lang.Object,​java.lang.Object> categoryParent
    • isClassCategory

      protected boolean isClassCategory
  • Constructor Details

    • CategorisedListenerSet

      public CategorisedListenerSet()
      Empty constructor.
    • CategorisedListenerSet

      public CategorisedListenerSet​(boolean isClassCategory)
      Parameters:
      isClassCategory - si vrai et que les categorie passé en arguement lors de l'ajout sont de type Class alors lors du fire on recherche aussi les peres dans la hierarchie d'heritage de la classe (Super class et interfaces)
  • Method Details

    • checkCategory

      protected void checkCategory​(java.lang.Object category)
    • addCategory

      public void addCategory​(java.lang.Object parent, java.lang.Object newCategory)
      Ajoute une categorie en indiquant sont pere. Une categorie ne peut avoir qu'un seul pere, si la nouvelle categorie existait deja alors l'appel a cette methode change son pere.
      Parameters:
      parent - le pere de la categorie, null si on ne souhaite pas de pere
      newCategory - la nouvelle caterogie
    • add

      public void add​(java.lang.Object category, L l)
      Ajoute un listener sur une certaine categorie, si la categorie n'existe alors on la crée en ne lui affectant pas de père
      Parameters:
      category - la categorie dans lequel il faut ajouter le listener
      l - le listener a ajouter
    • remove

      public void remove​(java.lang.Object category, L l)
      Supprime un listener d'une categorie, si la categorie ou le listener n'existe pas, rien ne se passe.
      Parameters:
      category - la categorie dans lequel il faut supprimer le listener
      l - le listener a supprimer
    • fire

      public void fire​(java.lang.Object category, java.lang.String methodName, java.lang.Object event) throws java.lang.Exception
      Permet de lancer un event dans une categorie, l'event est aussi propagé sur les ancètres de la categorie
      Parameters:
      category - la categorie a partir duquel il faut lancer l'evenement
      methodName - le nom de la méthode de la classe listener
      event - l'objet event a passer en paramètre de la methode du listener
      Throws:
      java.lang.Exception - if event can't be fired
    • fire

      public void fire​(java.lang.Object category, java.lang.String methodName) throws java.lang.Exception
      Permet de lancer un event dans une categorie, l'event est aussi propagé sur les ancètres de la categorie, si un meme objet etait listener dans plusieurs categories alors il ne recevra qu'une seul notification
      Parameters:
      category - la categorie a partir duquel il faut lancer l'evenement
      methodName - le nom de la méthode de la classe listener
      Throws:
      java.lang.Exception - if event can't be fired
    • iterator

      public java.util.Iterator<L> iterator​(java.lang.Object category)
      Retourne un Iterator sur tous les listeners qu'il faut prevenir si on souhaite prevenir une certaine categorie. Ceci inclue les ancetre de la categorie
      Parameters:
      category - category to get iterator on
      Returns:
      iterator
    • getAllListeners

      protected ListenerSet<L> getAllListeners​(java.lang.Object category)
      Parameters:
      category - categorie demandee
      Returns:
      un ListenerSet contenant tous les listeners c'est à dire les listener de la categorie demandé mais aussi les listeners des ancetres
    • getListenersClass

      protected ListenerSet<L> getListenersClass​(java.lang.Class<?> category)
    • getListeners

      protected ListenerSet<L> getListeners​(java.lang.Object category)
      Parameters:
      category - categorie demandee
      Returns:
      un ListenerSet contenant seulement les listener de la categorie demandé. Si la categorie n'existe pas alors elle est créé.
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object