Index: lutinutil/src/java/org/codelutin/util/CategorisedListenerSet.java diff -u lutinutil/src/java/org/codelutin/util/CategorisedListenerSet.java:1.2 lutinutil/src/java/org/codelutin/util/CategorisedListenerSet.java:1.3 --- lutinutil/src/java/org/codelutin/util/CategorisedListenerSet.java:1.2 Fri May 14 12:51:12 2004 +++ lutinutil/src/java/org/codelutin/util/CategorisedListenerSet.java Thu Aug 12 17:04:12 2004 @@ -23,9 +23,9 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Mise a jour: $Date: 2004/05/14 12:51:12 $ + * Mise a jour: $Date: 2004/08/12 17:04:12 $ * par : $Author: bpoussin $ */ @@ -41,12 +41,24 @@ * 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 {@link #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 +* @see org.codelutin.util.ListenerSet */ public class CategorisedListenerSet { // CategorisedListenerSet + /** + * permet de remplacer toutes les categories. + * Si on utilise cette category, alors tous les listeners present + * seront utilisé. + */ + static public final Object ALL = new Object(); + /** HashMap de ListenerSet, en cle l'objet qui caracterise la categorie * en valeur un ListenerSet */ @@ -60,6 +72,13 @@ this.listenerClass = listenerClass; } + + protected void checkCategory(Object category){ + if(category == ALL){ + throw new IllegalArgumentException("ALL category can't be use to add listener or add Category"); + } + } + /** * Ajoute une categorie en indiquant sont pere. Une categorie ne peut * avoir qu'un seul pere, si la nouvelle categorie existait deja @@ -68,6 +87,8 @@ * @param newCategory la nouvelle caterogie */ public void addCategory(Object parent, Object newCategory){ + checkCategory(parent); + checkCategory(newCategory); categoryParent.put(newCategory, parent); } @@ -78,6 +99,7 @@ * @param l le listener a ajouter */ public void add(Object category, Object l){ + checkCategory(category); ListenerSet listeners = getListeners(category); listeners.add(l); } @@ -136,9 +158,15 @@ */ protected ListenerSet getAllListeners(Object category){ ListenerSet result = new ListenerSet(listenerClass); - while(category != null){ - result.addAll(getListeners(category)); - category = categoryParent.get(category); + if(category == ALL){ + for(Iterator i=listeners.value().iterator(); i.hasNext();){ + result.addAll((ListenerSet)i.next()); + } + }else{ + while(category != null){ + result.addAll(getListeners(category)); + category = categoryParent.get(category); + } } return result; } Index: lutinutil/src/java/org/codelutin/util/ListenerSet.java diff -u lutinutil/src/java/org/codelutin/util/ListenerSet.java:1.2 lutinutil/src/java/org/codelutin/util/ListenerSet.java:1.3 --- lutinutil/src/java/org/codelutin/util/ListenerSet.java:1.2 Fri May 14 12:51:12 2004 +++ lutinutil/src/java/org/codelutin/util/ListenerSet.java Thu Aug 12 17:04:12 2004 @@ -23,9 +23,9 @@ * * @author Benjamin Poussin * Copyright Code Lutin - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Mise a jour: $Date: 2004/05/14 12:51:12 $ + * Mise a jour: $Date: 2004/08/12 17:04:12 $ * par : $Author: bpoussin $ */ @@ -66,6 +66,7 @@ * Cette deuxième façon de faire est plus sûr car elle n'utilise pas * l'introspection et donc une vérification est faite sur le nom de la méthode * à appeler à la compilation, mais elle est plus verbeuse à écrire. +* @see org.codelutin.util.CategorisedListenerSet */ public class ListenerSet { // ListenerSet Index: lutinutil/src/java/org/codelutin/util/Resource.java diff -u lutinutil/src/java/org/codelutin/util/Resource.java:1.12 lutinutil/src/java/org/codelutin/util/Resource.java:1.13 --- lutinutil/src/java/org/codelutin/util/Resource.java:1.12 Thu Aug 5 16:06:40 2004 +++ lutinutil/src/java/org/codelutin/util/Resource.java Thu Aug 12 17:04:12 2004 @@ -23,10 +23,10 @@ * * @author POUSSIN Benjamin * Copyright Code Lutin -* @version $Revision: 1.12 $ +* @version $Revision: 1.13 $ * -* Mise a jour: $Date: 2004/08/05 16:06:40 $ -* par : $Author: mazelier $ +* Mise a jour: $Date: 2004/08/12 17:04:12 $ +* par : $Author: bpoussin $ */ package org.codelutin.util; @@ -48,6 +48,8 @@ import java.util.List; import java.util.StringTokenizer; import java.util.ArrayList; +import java.lang.reflect.Method; +import java.lang.ClassLoader; /** @@ -60,6 +62,23 @@ protected Resource() { + } + + /** + * Permet d'ajouter dans le classloader par defaut une nouvelle URL + * dans lequel il faut rechercher les fichiers. + * @param url l'url a ajouter + */ + static public void addDefaultClassLoader(URL url){ + try{ + ClassLoader classLoader = ClassLoader.getSystemClassLoader(); + + Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class}); + method.setAccessible(true); + method.invoke(classLoader, new Object[]{url}); + }catch(Exception eee){ + throw new RuntimeException("Can't add url in default classloader", eee); + } } /**