]> git.argeo.org Git - lgpl/argeo-commons.git/blob - LdifGroup.java
a19052425491759a9c2c55687522fa9532a49397
[lgpl/argeo-commons.git] / LdifGroup.java
1 package org.argeo.osgi.useradmin;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.naming.NamingEnumeration;
7 import javax.naming.directory.Attribute;
8 import javax.naming.directory.Attributes;
9 import javax.naming.ldap.LdapName;
10
11 import org.osgi.service.useradmin.Group;
12 import org.osgi.service.useradmin.Role;
13 import org.osgi.service.useradmin.UserAdmin;
14
15 public class LdifGroup extends LdifUser implements Group {
16 // optimisation
17 // List<Role> directMembers = null;
18
19 private final UserAdmin userAdmin;
20 private String memberAttrName = "member";
21
22 public LdifGroup(UserAdmin userAdmin, LdapName dn, Attributes attributes) {
23 super(dn, attributes);
24 this.userAdmin = userAdmin;
25 }
26
27 @Override
28 public boolean addMember(Role role) {
29 Attribute member = getAttributes().get(memberAttrName);
30 if (member != null) {
31 if (member.contains(role.getName()))
32 return false;
33 } else
34 getAttributes().put(memberAttrName, role.getName());
35 // directMembers.add(role);
36 // if (role instanceof LdifUser)
37 // ((LdifUser) role).directMemberOf.add(this);
38 return true;
39 }
40
41 @Override
42 public boolean addRequiredMember(Role role) {
43 throw new UnsupportedOperationException();
44 }
45
46 @Override
47 public boolean removeMember(Role role) {
48 Attribute member = getAttributes().get(memberAttrName);
49 if (member != null) {
50 if (!member.contains(role.getName()))
51 return false;
52 member.remove(role.getName());
53 // directMembers.remove(role);
54 // if (role instanceof LdifUser)
55 // ((LdifUser) role).directMemberOf.remove(this);
56 return true;
57 } else
58 return false;
59 }
60
61 @Override
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());
70 }
71 if (role == null)
72 throw new ArgeoUserAdminException("No role found for "
73 + ldapName);
74
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);
80 }
81 return directMembers.toArray(new Role[directMembers.size()]);
82 // if (directMembers != null)
83 // return directMembers.toArray(new Role[directMembers.size()]);
84 // else
85 // throw new ArgeoUserAdminException("Members have not been loaded.");
86
87 // Attribute memberAttribute = getAttributes().get(memberAttrName);
88 // if (memberAttribute == null)
89 // return new Role[0];
90 // try {
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));
96 // }
97 // return roles.toArray(new Role[roles.size()]);
98 // } catch (Exception e) {
99 // throw new ArgeoUserAdminException("Cannot get members", e);
100 // }
101 }
102
103 // void loadMembers(LdifUserAdmin userAdmin) {
104 // directMembers = new ArrayList<Role>();
105 // for (LdapName ldapName : getMemberNames()) {
106 // LdifUser role;
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);
111 // else
112 // throw new ArgeoUserAdminException("No role found for "
113 // + ldapName);
114 // role.directMemberOf.add(this);
115 // directMembers.add(role);
116 // }
117 // }
118
119 List<LdapName> getMemberNames() {
120 Attribute memberAttribute = getAttributes().get(memberAttrName);
121 if (memberAttribute == null)
122 return new ArrayList<LdapName>();
123 try {
124 List<LdapName> roles = new ArrayList<LdapName>();
125 NamingEnumeration<?> values = memberAttribute.getAll();
126 while (values.hasMore()) {
127 LdapName dn = new LdapName(values.next().toString());
128 roles.add(dn);
129 }
130 return roles;
131 } catch (Exception e) {
132 throw new ArgeoUserAdminException("Cannot get members", e);
133 }
134 }
135
136 @Override
137 public Role[] getRequiredMembers() {
138 throw new UnsupportedOperationException();
139 }
140
141 @Override
142 public int getType() {
143 return GROUP;
144 }
145
146 public String getMemberAttrName() {
147 return memberAttrName;
148 }
149
150 }