Index: topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPrincipalMap.java diff -u /dev/null topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPrincipalMap.java:1.1 --- /dev/null Thu Sep 21 13:22:19 2006 +++ topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPrincipalMap.java Thu Sep 21 13:22:14 2006 @@ -0,0 +1,43 @@ +package org.codelutin.topia.security.jaas; + +import java.security.Principal; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; + +public class TopiaPrincipalMap extends HashMap> { + + private static final long serialVersionUID = 1L; + + public TopiaPrincipalMap() { + super(); + } + + public void add(Set principals) { + for (Principal principal : principals) { + add(principal.getClass().getName(), principal.getName()); + } + } + + public void add(String principals) { + principals = principals.replaceAll(" +", " ");// Un seul espace quand il y en a plusieurs + StringTokenizer tok = new StringTokenizer(principals, " ", false); + while (tok.hasMoreTokens()) { + String principalName = tok.nextToken(); + add(TopiaPrincipal.class.getName(), principalName); + } + + } + + protected void add(String principalClass, String principalName) { + Set names = (Set) get(principalClass); + if (names == null) { + put(principalClass, names = new HashSet()); + } + if (principalName.trim().startsWith("[") && principalName.endsWith("]")) { + principalName = principalName.substring(1, principalName.lastIndexOf("]")); + } + names.add(principalName); + } +}