Package org.nuiton.util
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.ObjectALLpermet de remplacer toutes les categories.protected java.util.WeakHashMap<java.lang.Object,java.lang.Object>categoryParentprotected booleanisClassCategoryprotected java.util.WeakHashMap<java.lang.Object,ListenerSet<L>>listenersHashMap 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 voidadd(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èrevoidaddCategory(java.lang.Object parent, java.lang.Object newCategory)Ajoute une categorie en indiquant sont pere.protected voidcheckCategory(java.lang.Object category)voidfire(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 notificationvoidfire(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 categorieprotected 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.voidremove(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.StringtoString()
-
Field Details
-
ALL
public static final java.lang.Object ALLpermet de remplacer toutes les categories. Si on utilise cette category, alors tous les listeners present seront utilisé. -
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 perenewCategory- la nouvelle caterogie
-
add
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 listenerl- le listener a ajouter
-
remove
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 listenerl- le listener a supprimer
-
fire
public void fire(java.lang.Object category, java.lang.String methodName, java.lang.Object event) throws java.lang.ExceptionPermet 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'evenementmethodName- le nom de la méthode de la classe listenerevent- 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.ExceptionPermet 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'evenementmethodName- le nom de la méthode de la classe listener- Throws:
java.lang.Exception- if event can't be fired
-
iterator
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
- 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
-
getListeners
- 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:
toStringin classjava.lang.Object
-