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 /** Directory group implementation */
14 class LdifGroup
extends LdifUser
implements DirectoryGroup
{
15 private final String memberAttributeId
;
17 LdifGroup(AbstractUserDirectory userAdmin
, LdapName dn
,
18 Attributes attributes
) {
19 super(userAdmin
, dn
, attributes
);
20 memberAttributeId
= userAdmin
.getMemberAttributeId();
24 public boolean addMember(Role role
) {
25 getUserAdmin().checkEdit();
29 Attribute member
= getAttributes().get(memberAttributeId
);
31 if (member
.contains(role
.getName()))
34 member
.add(role
.getName());
36 getAttributes().put(memberAttributeId
, role
.getName());
41 public boolean addRequiredMember(Role role
) {
42 throw new UnsupportedOperationException();
46 public boolean removeMember(Role role
) {
47 getUserAdmin().checkEdit();
51 Attribute member
= getAttributes().get(memberAttributeId
);
53 if (!member
.contains(role
.getName()))
55 member
.remove(role
.getName());
62 public Role
[] getMembers() {
63 List
<Role
> directMembers
= new ArrayList
<Role
>();
64 for (LdapName ldapName
: getMemberNames()) {
65 Role role
= getUserAdmin().getRole(ldapName
.toString());
67 if (getUserAdmin().getExternalRoles() != null)
68 role
= getUserAdmin().getExternalRoles().getRole(
72 throw new UserDirectoryException("No role found for "
74 directMembers
.add(role
);
76 return directMembers
.toArray(new Role
[directMembers
.size()]);
80 public List
<LdapName
> getMemberNames() {
81 Attribute memberAttribute
= getAttributes().get(memberAttributeId
);
82 if (memberAttribute
== null)
83 return new ArrayList
<LdapName
>();
85 List
<LdapName
> roles
= new ArrayList
<LdapName
>();
86 NamingEnumeration
<?
> values
= memberAttribute
.getAll();
87 while (values
.hasMore()) {
88 LdapName dn
= new LdapName(values
.next().toString());
92 } catch (Exception e
) {
93 throw new UserDirectoryException("Cannot get members", e
);
98 public Role
[] getRequiredMembers() {
99 throw new UnsupportedOperationException();
103 public int getType() {