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