X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.security.core%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fuseradmin%2FLdifGroup.java;h=3e9d44750b2ef333326d36cf2a971483c74b61e4;hb=25071ab6bcb2df1fa4057c2c04137f2d606772e7;hp=a19052425491759a9c2c55687522fa9532a49397;hpb=50911fdcc6df5cd35e71a0a4ecddf03f98f742a2;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java index a19052425..3e9d44750 100644 --- a/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java +++ b/org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java @@ -8,33 +8,25 @@ import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.ldap.LdapName; -import org.osgi.service.useradmin.Group; import org.osgi.service.useradmin.Role; -import org.osgi.service.useradmin.UserAdmin; -public class LdifGroup extends LdifUser implements Group { - // optimisation - // List directMembers = null; +public class LdifGroup extends LdifUser implements DirectoryGroup { + private final String memberAttributeId; - private final UserAdmin userAdmin; - private String memberAttrName = "member"; - - public LdifGroup(UserAdmin userAdmin, LdapName dn, Attributes attributes) { - super(dn, attributes); - this.userAdmin = userAdmin; + public LdifGroup(AbstractUserDirectory userAdmin, LdapName dn, + Attributes attributes) { + super(userAdmin, dn, attributes); + memberAttributeId = userAdmin.getMemberAttributeId(); } @Override public boolean addMember(Role role) { - Attribute member = getAttributes().get(memberAttrName); + Attribute member = getAttributes().get(memberAttributeId); if (member != null) { if (member.contains(role.getName())) return false; } else - getAttributes().put(memberAttrName, role.getName()); - // directMembers.add(role); - // if (role instanceof LdifUser) - // ((LdifUser) role).directMemberOf.add(this); + getAttributes().put(memberAttributeId, role.getName()); return true; } @@ -45,14 +37,11 @@ public class LdifGroup extends LdifUser implements Group { @Override public boolean removeMember(Role role) { - Attribute member = getAttributes().get(memberAttrName); + Attribute member = getAttributes().get(memberAttributeId); if (member != null) { if (!member.contains(role.getName())) return false; member.remove(role.getName()); - // directMembers.remove(role); - // if (role instanceof LdifUser) - // ((LdifUser) role).directMemberOf.remove(this); return true; } else return false; @@ -62,62 +51,23 @@ public class LdifGroup extends LdifUser implements Group { public Role[] getMembers() { List directMembers = new ArrayList(); for (LdapName ldapName : getMemberNames()) { - Role role = userAdmin.getRole(ldapName.toString()); - if (role == null && userAdmin instanceof AbstractLdapUserAdmin) { - AbstractLdapUserAdmin ua = (AbstractLdapUserAdmin) userAdmin; - if (ua.getExternalRoles() != null) - role = ua.getExternalRoles().getRole(ldapName.toString()); + Role role = getUserAdmin().getRole(ldapName.toString()); + if (role == null) { + if (getUserAdmin().getExternalRoles() != null) + role = getUserAdmin().getExternalRoles().getRole( + ldapName.toString()); } if (role == null) - throw new ArgeoUserAdminException("No role found for " + throw new UserDirectoryException("No role found for " + ldapName); - - // role.directMemberOf.add(group); - // if (!directMemberOf.containsKey(role.getDn())) - // directMemberOf.put(role.getDn(), new ArrayList()); - // directMemberOf.get(role.getDn()).add(group); directMembers.add(role); } return directMembers.toArray(new Role[directMembers.size()]); - // if (directMembers != null) - // return directMembers.toArray(new Role[directMembers.size()]); - // else - // throw new ArgeoUserAdminException("Members have not been loaded."); - - // Attribute memberAttribute = getAttributes().get(memberAttrName); - // if (memberAttribute == null) - // return new Role[0]; - // try { - // List roles = new ArrayList(); - // NamingEnumeration values = memberAttribute.getAll(); - // while (values.hasMore()) { - // LdapName dn = new LdapName(values.next().toString()); - // roles.add(new LdifUser(dn, null)); - // } - // return roles.toArray(new Role[roles.size()]); - // } catch (Exception e) { - // throw new ArgeoUserAdminException("Cannot get members", e); - // } } - // void loadMembers(LdifUserAdmin userAdmin) { - // directMembers = new ArrayList(); - // for (LdapName ldapName : getMemberNames()) { - // LdifUser role; - // if (userAdmin.groups.containsKey(ldapName)) - // role = userAdmin.groups.get(ldapName); - // else if (userAdmin.users.containsKey(ldapName)) - // role = userAdmin.users.get(ldapName); - // else - // throw new ArgeoUserAdminException("No role found for " - // + ldapName); - // role.directMemberOf.add(this); - // directMembers.add(role); - // } - // } - - List getMemberNames() { - Attribute memberAttribute = getAttributes().get(memberAttrName); + @Override + public List getMemberNames() { + Attribute memberAttribute = getAttributes().get(memberAttributeId); if (memberAttribute == null) return new ArrayList(); try { @@ -129,7 +79,7 @@ public class LdifGroup extends LdifUser implements Group { } return roles; } catch (Exception e) { - throw new ArgeoUserAdminException("Cannot get members", e); + throw new UserDirectoryException("Cannot get members", e); } } @@ -142,9 +92,4 @@ public class LdifGroup extends LdifUser implements Group { public int getType() { return GROUP; } - - public String getMemberAttrName() { - return memberAttrName; - } - }