1 package org
.argeo
.osgi
.useradmin
;
3 import java
.util
.ArrayList
;
6 import javax
.naming
.InvalidNameException
;
7 import javax
.naming
.directory
.Attribute
;
8 import javax
.naming
.ldap
.LdapName
;
10 import org
.argeo
.util
.directory
.ldap
.AbstractLdapDirectory
;
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(AbstractLdapDirectory userAdmin
, LdapName dn
) {
19 memberAttributeId
= userAdmin
.getMemberAttributeId();
23 public boolean addMember(Role role
) {
25 Role foundRole
= findRole(new LdapName(role
.getName()));
26 if (foundRole
== null)
27 throw new UnsupportedOperationException(
28 "Adding role " + role
.getName() + " is unsupported within this context.");
29 } catch (InvalidNameException e
) {
30 throw new IllegalArgumentException("Role name" + role
.getName() + " is badly formatted");
33 getUserAdmin().checkEdit();
37 Attribute member
= getAttributes().get(memberAttributeId
);
39 if (member
.contains(role
.getName()))
42 member
.add(role
.getName());
44 getAttributes().put(memberAttributeId
, role
.getName());
49 public boolean addRequiredMember(Role role
) {
50 throw new UnsupportedOperationException();
54 public boolean removeMember(Role role
) {
55 getUserAdmin().checkEdit();
59 Attribute member
= getAttributes().get(memberAttributeId
);
61 if (!member
.contains(role
.getName()))
63 member
.remove(role
.getName());
70 public Role
[] getMembers() {
71 List
<Role
> directMembers
= new ArrayList
<Role
>();
72 for (LdapName ldapName
: getReferences(memberAttributeId
)) {
73 Role role
= findRole(ldapName
);
75 throw new IllegalStateException("Role " + ldapName
+ " not found.");
77 directMembers
.add(role
);
79 return directMembers
.toArray(new Role
[directMembers
.size()]);
83 * Whether a role with this name can be found from this context.
85 * @return The related {@link Role} or <code>null</code>.
87 protected Role
findRole(LdapName ldapName
) {
88 Role role
= getUserAdmin().getRole(ldapName
.toString());
90 if (getUserAdmin().getExternalRoles() != null)
91 role
= getUserAdmin().getExternalRoles().getRole(ldapName
.toString());
97 // public List<LdapName> getMemberNames() {
98 // Attribute memberAttribute = getAttributes().get(memberAttributeId);
99 // if (memberAttribute == null)
100 // return new ArrayList<LdapName>();
102 // List<LdapName> roles = new ArrayList<LdapName>();
103 // NamingEnumeration<?> values = memberAttribute.getAll();
104 // while (values.hasMore()) {
105 // LdapName dn = new LdapName(values.next().toString());
109 // } catch (NamingException e) {
110 // throw new IllegalStateException("Cannot get members", e);
115 public Role
[] getRequiredMembers() {
116 throw new UnsupportedOperationException();
120 public int getType() {
124 protected DirectoryUserAdmin
getUserAdmin() {
125 return (DirectoryUserAdmin
) getDirectory();