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) {
@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.");
}
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