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
.Group
;
12 import org
.osgi
.service
.useradmin
.Role
;
14 public class LdifGroup
extends LdifUser
implements Group
{
16 List
<Role
> directMembers
= null;
18 private String memberAttrName
= "member";
20 public LdifGroup(LdapName dn
, Attributes attributes
) {
21 super(dn
, attributes
);
25 public boolean addMember(Role role
) {
26 Attribute member
= getAttributes().get(memberAttrName
);
28 if (member
.contains(role
.getName()))
31 getAttributes().put(memberAttrName
, role
.getName());
32 directMembers
.add(role
);
33 if (role
instanceof LdifUser
)
34 ((LdifUser
) role
).directMemberOf
.add(this);
39 public boolean addRequiredMember(Role role
) {
40 throw new UnsupportedOperationException();
44 public boolean removeMember(Role role
) {
45 Attribute member
= getAttributes().get(memberAttrName
);
47 if (!member
.contains(role
.getName()))
49 member
.remove(role
.getName());
50 directMembers
.remove(role
);
51 if (role
instanceof LdifUser
)
52 ((LdifUser
) role
).directMemberOf
.remove(this);
59 public Role
[] getMembers() {
60 if (directMembers
!= null)
61 return directMembers
.toArray(new Role
[directMembers
.size()]);
63 throw new ArgeoUserAdminException("Members have not been loaded.");
65 // Attribute memberAttribute = getAttributes().get(memberAttrName);
66 // if (memberAttribute == null)
67 // return new Role[0];
69 // List<Role> roles = new ArrayList<Role>();
70 // NamingEnumeration values = memberAttribute.getAll();
71 // while (values.hasMore()) {
72 // LdapName dn = new LdapName(values.next().toString());
73 // roles.add(new LdifUser(dn, null));
75 // return roles.toArray(new Role[roles.size()]);
76 // } catch (Exception e) {
77 // throw new ArgeoUserAdminException("Cannot get members", e);
81 // void loadMembers(LdifUserAdmin userAdmin) {
82 // directMembers = new ArrayList<Role>();
83 // for (LdapName ldapName : getMemberNames()) {
85 // if (userAdmin.groups.containsKey(ldapName))
86 // role = userAdmin.groups.get(ldapName);
87 // else if (userAdmin.users.containsKey(ldapName))
88 // role = userAdmin.users.get(ldapName);
90 // throw new ArgeoUserAdminException("No role found for "
92 // role.directMemberOf.add(this);
93 // directMembers.add(role);
97 List
<LdapName
> getMemberNames() {
98 Attribute memberAttribute
= getAttributes().get(memberAttrName
);
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 (Exception e
) {
110 throw new ArgeoUserAdminException("Cannot get members", e
);
115 public Role
[] getRequiredMembers() {
116 throw new UnsupportedOperationException();
120 public int getType() {
124 public String
getMemberAttrName() {
125 return memberAttrName
;