Index: topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java diff -u topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java:1.12 topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java:1.13 --- topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java:1.12 Tue Oct 31 09:08:26 2006 +++ topia-security/src/java/org/codelutin/topia/security/util/TopiaSecurityUtil.java Tue Nov 14 10:25:32 2006 @@ -24,9 +24,9 @@ * Created: 15 févr. 2006 * * @author Arnaud Thimel -* @version $Revision: 1.12 $ +* @version $Revision: 1.13 $ * -* Mise a jour: $Date: 2006/10/31 09:08:26 $ +* Mise a jour: $Date: 2006/11/14 10:25:32 $ * par : $Author: ruchaud $ */ @@ -41,6 +41,7 @@ import javax.security.auth.Subject; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.topia.TopiaContext; @@ -241,4 +242,32 @@ return topiaContext.beginTransaction(); } + /** + * Détermine si la classe implémente une interface + *

+ * interface A <---- class B <---- class C + *

+ * interface D <---- class E + *

+ * isImplement(C, A) = true + *

+ * isImplement(E, A) = false + * + * @param klass la classe + * @param iface l'interface + * @return vrai si la classe implémente l'interface sinon faux + */ + public static boolean isImplement(Class klass, Class iface) { + boolean result = false; + + Class[] interfaces = klass.getInterfaces(); + result |= ArrayUtils.contains(interfaces, iface); + + Class superclass = klass.getSuperclass(); + if(!result && superclass != null) { + result |= isImplement(superclass, iface); + } + + return result; + } } //TopiaSecurityUtil