]> git.argeo.org Git - lgpl/argeo-commons.git/blob - useradmin/LdifGroup.java
Prepare next development cycle
[lgpl/argeo-commons.git] / 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.Group;
12 import org.osgi.service.useradmin.Role;
13
14 public class LdifGroup extends LdifUser implements Group {
15 // optimisation
16 List<Role> directMembers = null;
17
18 private String memberAttrName = "member";
19
20 public LdifGroup(LdapName dn, Attributes attributes) {
21 super(dn, attributes);
22 }
23
24 @Override
25 public boolean addMember(Role role) {
26 Attribute member = getAttributes().get(memberAttrName);
27 if (member != null) {
28 if (member.contains(role.getName()))
29 return false;
30 } else
31 getAttributes().put(memberAttrName, role.getName());
32 directMembers.add(role);
33 if (role instanceof LdifUser)
34 ((LdifUser) role).directMemberOf.add(this);
35 return true;
36 }
37
38 @Override
39 public boolean addRequiredMember(Role role) {
40 throw new UnsupportedOperationException();
41 }
42
43 @Override
44 public boolean removeMember(Role role) {
45 Attribute member = getAttributes().get(memberAttrName);
46 if (member != null) {
47 if (!member.contains(role.getName()))
48 return false;
49 member.remove(role.getName());
50 directMembers.remove(role);
51 if (role instanceof LdifUser)
52 ((LdifUser) role).directMemberOf.remove(this);
53 return true;
54 } else
55 return false;
56 }
57
58 @Override
59 public Role[] getMembers() {
60 if (directMembers != null)
61 return directMembers.toArray(new Role[directMembers.size()]);
62 else
63 throw new ArgeoUserAdminException("Members have not been loaded.");
64
65 // Attribute memberAttribute = getAttributes().get(memberAttrName);
66 // if (memberAttribute == null)
67 // return new Role[0];
68 // try {
69 // List<Role> roles = new ArrayList<Role>();
70 // NamingEnumeration values = memberAttribute.getAll();
71 // while (values.hasMore()) {
72 // LdapName dn = new LdapName(values.next().toString());
73 // roles.add(new LdifUser(dn, null));
74 // }
75 // return roles.toArray(new Role[roles.size()]);
76 // } catch (Exception e) {
77 // throw new ArgeoUserAdminException("Cannot get members", e);
78 // }
79 }
80
81 // void loadMembers(LdifUserAdmin userAdmin) {
82 // directMembers = new ArrayList<Role>();
83 // for (LdapName ldapName : getMemberNames()) {
84 // LdifUser role;
85 // if (userAdmin.groups.containsKey(ldapName))
86 // role = userAdmin.groups.get(ldapName);
87 // else if (userAdmin.users.containsKey(ldapName))
88 // role = userAdmin.users.get(ldapName);
89 // else
90 // throw new ArgeoUserAdminException("No role found for "
91 // + ldapName);
92 // role.directMemberOf.add(this);
93 // directMembers.add(role);
94 // }
95 // }
96
97 List<LdapName> getMemberNames() {
98 Attribute memberAttribute = getAttributes().get(memberAttrName);
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 (Exception e) {
110 throw new ArgeoUserAdminException("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 public String getMemberAttrName() {
125 return memberAttrName;
126 }
127
128
129 }