- 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<Role> roles = new ArrayList<Role>();
- // 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);
- // }
+ List<Role> directMembers = new ArrayList<Role>();
+ for (LdapName ldapName : getMemberNames()) {
+ Role role = getUserAdmin().getRole(ldapName.toString());
+ if (role == null) {
+ if (getUserAdmin().getExternalRoles() != null)
+ role = getUserAdmin().getExternalRoles().getRole(
+ ldapName.toString());
+ }
+ if (role == null)
+ throw new UserDirectoryException("No role found for "
+ + ldapName);
+ directMembers.add(role);
+ }
+ return directMembers.toArray(new Role[directMembers.size()]);