X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fosgi%2Fuseradmin%2FLdifGroup.java;fp=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fosgi%2Fuseradmin%2FLdifGroup.java;h=fd665149926c2287839e45d5b4638bfd3ca4f99d;hp=99aca1f2f4ea20d2d7460464068dc72d79f3f72f;hb=654cb2ca43dd4513a4d6a5bbe81762eaf6675496;hpb=a00a744d8ada0bbbeadc2b99fa56033856506e68 diff --git a/org.argeo.cms/src/org/argeo/cms/osgi/useradmin/LdifGroup.java b/org.argeo.cms/src/org/argeo/cms/osgi/useradmin/LdifGroup.java index 99aca1f2f..fd6651499 100644 --- a/org.argeo.cms/src/org/argeo/cms/osgi/useradmin/LdifGroup.java +++ b/org.argeo.cms/src/org/argeo/cms/osgi/useradmin/LdifGroup.java @@ -1,18 +1,18 @@ package org.argeo.cms.osgi.useradmin; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import javax.naming.InvalidNameException; import javax.naming.directory.Attribute; import javax.naming.ldap.LdapName; -import org.argeo.api.cms.directory.CmsGroup; +import org.argeo.api.cms.directory.CmsRole; import org.argeo.cms.directory.ldap.AbstractLdapDirectory; import org.osgi.service.useradmin.Role; /** Directory group implementation */ -class LdifGroup extends LdifUser implements CmsGroup { +class LdifGroup extends LdifUser implements CmsOsgiGroup { private final String memberAttributeId; LdifGroup(AbstractLdapDirectory userAdmin, LdapName dn) { @@ -69,9 +69,9 @@ class LdifGroup extends LdifUser implements CmsGroup { @Override public Role[] getMembers() { - List directMembers = new ArrayList(); + Set directMembers = new HashSet<>(); for (LdapName ldapName : getReferences(memberAttributeId)) { - Role role = findRole(ldapName); + CmsOsgiRole role = findRole(ldapName); if (role == null) { throw new IllegalStateException("Role " + ldapName + " not found."); } @@ -80,18 +80,35 @@ class LdifGroup extends LdifUser implements CmsGroup { return directMembers.toArray(new Role[directMembers.size()]); } + @Override + public Set getDirectMembers() { + return doGetDirectMembers(); + } + + protected Set doGetDirectMembers() { + Set directMembers = new HashSet<>(); + for (LdapName ldapName : getReferences(memberAttributeId)) { + CmsOsgiRole role = findRole(ldapName); + if (role == null) { + throw new IllegalStateException("Role " + ldapName + " not found."); + } + directMembers.add(role); + } + return directMembers; + } + /** * Whether a role with this name can be found from this context. * * @return The related {@link Role} or null. */ - protected Role findRole(LdapName ldapName) { + protected CmsOsgiRole findRole(LdapName ldapName) { Role role = getUserAdmin().getRole(ldapName.toString()); if (role == null) { if (getUserAdmin().getExternalRoles() != null) role = getUserAdmin().getExternalRoles().getRole(ldapName.toString()); } - return role; + return (CmsOsgiRole) role; } // @Override