1 package org
.argeo
.osgi
.useradmin
;
3 import java
.util
.ArrayList
;
6 import javax
.naming
.NamingEnumeration
;
7 import javax
.naming
.directory
.Attribute
;
8 import javax
.naming
.directory
.Attributes
;
9 import javax
.naming
.ldap
.LdapName
;
11 import org
.osgi
.service
.useradmin
.Role
;
13 class LdifGroup
extends LdifUser
implements DirectoryGroup
{
14 private final String memberAttributeId
;
16 public LdifGroup(AbstractUserDirectory userAdmin
, LdapName dn
,
17 Attributes attributes
) {
18 super(userAdmin
, dn
, attributes
);
19 memberAttributeId
= userAdmin
.getMemberAttributeId();
23 public boolean addMember(Role role
) {
24 getUserAdmin().checkEdit();
28 Attribute member
= getAttributes().get(memberAttributeId
);
30 if (member
.contains(role
.getName()))
33 member
.add(role
.getName());
35 getAttributes().put(memberAttributeId
, role
.getName());
40 public boolean addRequiredMember(Role role
) {
41 throw new UnsupportedOperationException();
45 public boolean removeMember(Role role
) {
46 getUserAdmin().checkEdit();
50 Attribute member
= getAttributes().get(memberAttributeId
);
52 if (!member
.contains(role
.getName()))
54 member
.remove(role
.getName());
61 public Role
[] getMembers() {
62 List
<Role
> directMembers
= new ArrayList
<Role
>();
63 for (LdapName ldapName
: getMemberNames()) {
64 Role role
= getUserAdmin().getRole(ldapName
.toString());
66 if (getUserAdmin().getExternalRoles() != null)
67 role
= getUserAdmin().getExternalRoles().getRole(
71 throw new UserDirectoryException("No role found for "
73 directMembers
.add(role
);
75 return directMembers
.toArray(new Role
[directMembers
.size()]);
79 public List
<LdapName
> getMemberNames() {
80 Attribute memberAttribute
= getAttributes().get(memberAttributeId
);
81 if (memberAttribute
== null)
82 return new ArrayList
<LdapName
>();
84 List
<LdapName
> roles
= new ArrayList
<LdapName
>();
85 NamingEnumeration
<?
> values
= memberAttribute
.getAll();
86 while (values
.hasMore()) {
87 LdapName dn
= new LdapName(values
.next().toString());
91 } catch (Exception e
) {
92 throw new UserDirectoryException("Cannot get members", e
);
97 public Role
[] getRequiredMembers() {
98 throw new UnsupportedOperationException();
102 public int getType() {