1 package org
.argeo
.osgi
.useradmin
;
3 import java
.util
.ArrayList
;
6 import javax
.naming
.InvalidNameException
;
7 import javax
.naming
.NamingEnumeration
;
8 import javax
.naming
.directory
.Attribute
;
9 import javax
.naming
.directory
.Attributes
;
10 import javax
.naming
.ldap
.LdapName
;
12 import org
.osgi
.service
.useradmin
.Role
;
14 /** Directory group implementation */
15 class LdifGroup
extends LdifUser
implements DirectoryGroup
{
16 private final String memberAttributeId
;
18 LdifGroup(AbstractUserDirectory userAdmin
, LdapName dn
, Attributes attributes
) {
19 super(userAdmin
, dn
, attributes
);
20 memberAttributeId
= userAdmin
.getMemberAttributeId();
24 public boolean addMember(Role role
) {
26 Role foundRole
= findRole(new LdapName(role
.getName()));
27 if (foundRole
== null)
28 throw new UnsupportedOperationException(
29 "Adding role " + role
.getName() + " is unsupported within this context.");
30 } catch (InvalidNameException e
) {
31 throw new IllegalArgumentException("Role name" + role
.getName() + " is badly formatted");
34 getUserAdmin().checkEdit();
38 Attribute member
= getAttributes().get(memberAttributeId
);
40 if (member
.contains(role
.getName()))
43 member
.add(role
.getName());
45 getAttributes().put(memberAttributeId
, role
.getName());
50 public boolean addRequiredMember(Role role
) {
51 throw new UnsupportedOperationException();
55 public boolean removeMember(Role role
) {
56 getUserAdmin().checkEdit();
60 Attribute member
= getAttributes().get(memberAttributeId
);
62 if (!member
.contains(role
.getName()))
64 member
.remove(role
.getName());
71 public Role
[] getMembers() {
72 List
<Role
> directMembers
= new ArrayList
<Role
>();
73 for (LdapName ldapName
: getMemberNames()) {
74 Role role
= findRole(ldapName
);
76 throw new UserDirectoryException("Role " + ldapName
+ " cannot be added.");
78 directMembers
.add(role
);
80 return directMembers
.toArray(new Role
[directMembers
.size()]);
84 * Whether a role with this name can be found from this context.
86 * @return The related {@link Role} or <code>null</code>.
88 protected Role
findRole(LdapName ldapName
) {
89 Role role
= getUserAdmin().getRole(ldapName
.toString());
91 if (getUserAdmin().getExternalRoles() != null)
92 role
= getUserAdmin().getExternalRoles().getRole(ldapName
.toString());
98 public List
<LdapName
> getMemberNames() {
99 Attribute memberAttribute
= getAttributes().get(memberAttributeId
);
100 if (memberAttribute
== null)
101 return new ArrayList
<LdapName
>();
103 List
<LdapName
> roles
= new ArrayList
<LdapName
>();
104 NamingEnumeration
<?
> values
= memberAttribute
.getAll();
105 while (values
.hasMore()) {
106 LdapName dn
= new LdapName(values
.next().toString());
110 } catch (Exception e
) {
111 throw new UserDirectoryException("Cannot get members", e
);
116 public Role
[] getRequiredMembers() {
117 throw new UnsupportedOperationException();
121 public int getType() {