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
;
13 import org
.osgi
.service
.useradmin
.UserAdmin
;
15 public class LdifGroup
extends LdifUser
implements Group
{
17 // List<Role> directMembers = null;
19 private final UserAdmin userAdmin
;
20 private String memberAttrName
= "member";
22 public LdifGroup(UserAdmin userAdmin
, LdapName dn
, Attributes attributes
) {
23 super(dn
, attributes
);
24 this.userAdmin
= userAdmin
;
28 public boolean addMember(Role role
) {
29 Attribute member
= getAttributes().get(memberAttrName
);
31 if (member
.contains(role
.getName()))
34 getAttributes().put(memberAttrName
, role
.getName());
35 // directMembers.add(role);
36 // if (role instanceof LdifUser)
37 // ((LdifUser) role).directMemberOf.add(this);
42 public boolean addRequiredMember(Role role
) {
43 throw new UnsupportedOperationException();
47 public boolean removeMember(Role role
) {
48 Attribute member
= getAttributes().get(memberAttrName
);
50 if (!member
.contains(role
.getName()))
52 member
.remove(role
.getName());
53 // directMembers.remove(role);
54 // if (role instanceof LdifUser)
55 // ((LdifUser) role).directMemberOf.remove(this);
62 public Role
[] getMembers() {
63 List
<Role
> directMembers
= new ArrayList
<Role
>();
64 for (LdapName ldapName
: getMemberNames()) {
65 Role role
= userAdmin
.getRole(ldapName
.toString());
66 if (role
== null && userAdmin
instanceof AbstractLdapUserAdmin
) {
67 AbstractLdapUserAdmin ua
= (AbstractLdapUserAdmin
) userAdmin
;
68 if (ua
.getExternalRoles() != null)
69 role
= ua
.getExternalRoles().getRole(ldapName
.toString());
72 throw new ArgeoUserAdminException("No role found for "
75 // role.directMemberOf.add(group);
76 // if (!directMemberOf.containsKey(role.getDn()))
77 // directMemberOf.put(role.getDn(), new ArrayList<LdifGroup>());
78 // directMemberOf.get(role.getDn()).add(group);
79 directMembers
.add(role
);
81 return directMembers
.toArray(new Role
[directMembers
.size()]);
82 // if (directMembers != null)
83 // return directMembers.toArray(new Role[directMembers.size()]);
85 // throw new ArgeoUserAdminException("Members have not been loaded.");
87 // Attribute memberAttribute = getAttributes().get(memberAttrName);
88 // if (memberAttribute == null)
89 // return new Role[0];
91 // List<Role> roles = new ArrayList<Role>();
92 // NamingEnumeration values = memberAttribute.getAll();
93 // while (values.hasMore()) {
94 // LdapName dn = new LdapName(values.next().toString());
95 // roles.add(new LdifUser(dn, null));
97 // return roles.toArray(new Role[roles.size()]);
98 // } catch (Exception e) {
99 // throw new ArgeoUserAdminException("Cannot get members", e);
103 // void loadMembers(LdifUserAdmin userAdmin) {
104 // directMembers = new ArrayList<Role>();
105 // for (LdapName ldapName : getMemberNames()) {
107 // if (userAdmin.groups.containsKey(ldapName))
108 // role = userAdmin.groups.get(ldapName);
109 // else if (userAdmin.users.containsKey(ldapName))
110 // role = userAdmin.users.get(ldapName);
112 // throw new ArgeoUserAdminException("No role found for "
114 // role.directMemberOf.add(this);
115 // directMembers.add(role);
119 List
<LdapName
> getMemberNames() {
120 Attribute memberAttribute
= getAttributes().get(memberAttrName
);
121 if (memberAttribute
== null)
122 return new ArrayList
<LdapName
>();
124 List
<LdapName
> roles
= new ArrayList
<LdapName
>();
125 NamingEnumeration
<?
> values
= memberAttribute
.getAll();
126 while (values
.hasMore()) {
127 LdapName dn
= new LdapName(values
.next().toString());
131 } catch (Exception e
) {
132 throw new ArgeoUserAdminException("Cannot get members", e
);
137 public Role
[] getRequiredMembers() {
138 throw new UnsupportedOperationException();
142 public int getType() {
146 public String
getMemberAttrName() {
147 return memberAttrName
;