]> git.argeo.org Git - lgpl/argeo-commons.git/blob - LdifGroup.java
cf65784e09b5ef0ce822ab3776b9ef85f9aad607
[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.Role;
12
13 public class LdifGroup extends LdifUser implements DirectoryGroup {
14 private final String memberAttributeId;
15
16 public LdifGroup(AbstractUserDirectory userAdmin, LdapName dn,
17 Attributes attributes) {
18 super(userAdmin, dn, attributes);
19 memberAttributeId = userAdmin.getMemberAttributeId();
20 }
21
22 @Override
23 public boolean addMember(Role role) {
24 getUserAdmin().checkEdit();
25 if (!isEditing())
26 startEditing();
27
28 Attribute member = getAttributes().get(memberAttributeId);
29 if (member != null) {
30 if (member.contains(role.getName()))
31 return false;
32 else
33 member.add(role.getName());
34 } else
35 getAttributes().put(memberAttributeId, role.getName());
36 return true;
37 }
38
39 @Override
40 public boolean addRequiredMember(Role role) {
41 throw new UnsupportedOperationException();
42 }
43
44 @Override
45 public boolean removeMember(Role role) {
46 getUserAdmin().checkEdit();
47 if (!isEditing())
48 startEditing();
49
50 Attribute member = getAttributes().get(memberAttributeId);
51 if (member != null) {
52 if (!member.contains(role.getName()))
53 return false;
54 member.remove(role.getName());
55 return true;
56 } else
57 return false;
58 }
59
60 @Override
61 public Role[] getMembers() {
62 List<Role> directMembers = new ArrayList<Role>();
63 for (LdapName ldapName : getMemberNames()) {
64 Role role = getUserAdmin().getRole(ldapName.toString());
65 if (role == null) {
66 if (getUserAdmin().getExternalRoles() != null)
67 role = getUserAdmin().getExternalRoles().getRole(
68 ldapName.toString());
69 }
70 if (role == null)
71 throw new UserDirectoryException("No role found for "
72 + ldapName);
73 directMembers.add(role);
74 }
75 return directMembers.toArray(new Role[directMembers.size()]);
76 }
77
78 @Override
79 public List<LdapName> getMemberNames() {
80 Attribute memberAttribute = getAttributes().get(memberAttributeId);
81 if (memberAttribute == null)
82 return new ArrayList<LdapName>();
83 try {
84 List<LdapName> roles = new ArrayList<LdapName>();
85 NamingEnumeration<?> values = memberAttribute.getAll();
86 while (values.hasMore()) {
87 LdapName dn = new LdapName(values.next().toString());
88 roles.add(dn);
89 }
90 return roles;
91 } catch (Exception e) {
92 throw new UserDirectoryException("Cannot get members", e);
93 }
94 }
95
96 @Override
97 public Role[] getRequiredMembers() {
98 throw new UnsupportedOperationException();
99 }
100
101 @Override
102 public int getType() {
103 return GROUP;
104 }
105 }