Merge tag 'v2.3.28' into testing
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / osgi / useradmin / LdifGroup.java
index 99aca1f2f4ea20d2d7460464068dc72d79f3f72f..fd665149926c2287839e45d5b4638bfd3ca4f99d 100644 (file)
@@ -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<Role> directMembers = new ArrayList<Role>();
+               Set<CmsOsgiRole> 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<? extends CmsRole> getDirectMembers() {
+               return doGetDirectMembers();
+       }
+
+       protected Set<CmsOsgiRole> doGetDirectMembers() {
+               Set<CmsOsgiRole> 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 <code>null</code>.
         */
-       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