]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.util/src/org/argeo/osgi/useradmin/LdifGroup.java
Refactor WebDav implementation
[lgpl/argeo-commons.git] / org.argeo.util / 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.InvalidNameException;
7 import javax.naming.directory.Attribute;
8 import javax.naming.ldap.LdapName;
9
10 import org.argeo.util.directory.ldap.AbstractLdapDirectory;
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(AbstractLdapDirectory userAdmin, LdapName dn) {
18 super(userAdmin, dn);
19 memberAttributeId = userAdmin.getMemberAttributeId();
20 }
21
22 @Override
23 public boolean addMember(Role role) {
24 try {
25 Role foundRole = findRole(new LdapName(role.getName()));
26 if (foundRole == null)
27 throw new UnsupportedOperationException(
28 "Adding role " + role.getName() + " is unsupported within this context.");
29 } catch (InvalidNameException e) {
30 throw new IllegalArgumentException("Role name" + role.getName() + " is badly formatted");
31 }
32
33 getUserAdmin().checkEdit();
34 if (!isEditing())
35 startEditing();
36
37 Attribute member = getAttributes().get(memberAttributeId);
38 if (member != null) {
39 if (member.contains(role.getName()))
40 return false;
41 else
42 member.add(role.getName());
43 } else
44 getAttributes().put(memberAttributeId, role.getName());
45 return true;
46 }
47
48 @Override
49 public boolean addRequiredMember(Role role) {
50 throw new UnsupportedOperationException();
51 }
52
53 @Override
54 public boolean removeMember(Role role) {
55 getUserAdmin().checkEdit();
56 if (!isEditing())
57 startEditing();
58
59 Attribute member = getAttributes().get(memberAttributeId);
60 if (member != null) {
61 if (!member.contains(role.getName()))
62 return false;
63 member.remove(role.getName());
64 return true;
65 } else
66 return false;
67 }
68
69 @Override
70 public Role[] getMembers() {
71 List<Role> directMembers = new ArrayList<Role>();
72 for (LdapName ldapName : getReferences(memberAttributeId)) {
73 Role role = findRole(ldapName);
74 if (role == null) {
75 throw new IllegalStateException("Role " + ldapName + " not found.");
76 }
77 directMembers.add(role);
78 }
79 return directMembers.toArray(new Role[directMembers.size()]);
80 }
81
82 /**
83 * Whether a role with this name can be found from this context.
84 *
85 * @return The related {@link Role} or <code>null</code>.
86 */
87 protected Role findRole(LdapName ldapName) {
88 Role role = getUserAdmin().getRole(ldapName.toString());
89 if (role == null) {
90 if (getUserAdmin().getExternalRoles() != null)
91 role = getUserAdmin().getExternalRoles().getRole(ldapName.toString());
92 }
93 return role;
94 }
95
96 // @Override
97 // public List<LdapName> getMemberNames() {
98 // Attribute memberAttribute = getAttributes().get(memberAttributeId);
99 // if (memberAttribute == null)
100 // return new ArrayList<LdapName>();
101 // try {
102 // List<LdapName> roles = new ArrayList<LdapName>();
103 // NamingEnumeration<?> values = memberAttribute.getAll();
104 // while (values.hasMore()) {
105 // LdapName dn = new LdapName(values.next().toString());
106 // roles.add(dn);
107 // }
108 // return roles;
109 // } catch (NamingException e) {
110 // throw new IllegalStateException("Cannot get members", e);
111 // }
112 // }
113
114 @Override
115 public Role[] getRequiredMembers() {
116 throw new UnsupportedOperationException();
117 }
118
119 @Override
120 public int getType() {
121 return GROUP;
122 }
123
124 protected DirectoryUserAdmin getUserAdmin() {
125 return (DirectoryUserAdmin) getDirectory();
126 }
127 }