1 package org
.argeo
.cms
.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
.api
.cms
.directory
.CmsGroup
;
11 import org
.argeo
.cms
.directory
.ldap
.AbstractLdapDirectory
;
12 import org
.osgi
.service
.useradmin
.Role
;
14 /** Directory group implementation */
15 class LdifGroup
extends LdifUser
implements CmsGroup
{
16 private final String memberAttributeId
;
18 LdifGroup(AbstractLdapDirectory userAdmin
, LdapName dn
) {
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
: getReferences(memberAttributeId
)) {
74 Role role
= findRole(ldapName
);
76 throw new IllegalStateException("Role " + ldapName
+ " not found.");
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 (NamingException e) {
111 // throw new IllegalStateException("Cannot get members", e);
116 public Role
[] getRequiredMembers() {
117 throw new UnsupportedOperationException();
121 public int getType() {
125 protected DirectoryUserAdmin
getUserAdmin() {
126 return (DirectoryUserAdmin
) getDirectory();