]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java
First draft to adapt Security Admin UI to the new security model
[lgpl/argeo-commons.git] / org.argeo.security.core / 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.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 public LdifGroup(LdapName dn, Attributes attributes) {
19 super(dn, attributes);
20 }
21
22 @Override
23 public boolean addMember(Role role) {
24 throw new UnsupportedOperationException();
25 }
26
27 @Override
28 public boolean addRequiredMember(Role role) {
29 throw new UnsupportedOperationException();
30 }
31
32 @Override
33 public boolean removeMember(Role role) {
34 throw new UnsupportedOperationException();
35 }
36
37 @Override
38 public Role[] getMembers() {
39 if (directMembers != null)
40 return directMembers.toArray(new Role[directMembers.size()]);
41 else
42 throw new ArgeoUserAdminException("Members have not been loaded.");
43
44 // Attribute memberAttribute = getAttributes().get("member");
45 // if (memberAttribute == null)
46 // return new Role[0];
47 // try {
48 // List<Role> roles = new ArrayList<Role>();
49 // NamingEnumeration values = memberAttribute.getAll();
50 // while (values.hasMore()) {
51 // LdapName dn = new LdapName(values.next().toString());
52 // roles.add(new LdifUser(dn, null));
53 // }
54 // return roles.toArray(new Role[roles.size()]);
55 // } catch (Exception e) {
56 // throw new ArgeoUserAdminException("Cannot get members", e);
57 // }
58 }
59
60 void loadMembers(LdifUserAdmin userAdmin) {
61 directMembers = new ArrayList<Role>();
62 for (LdapName ldapName : getMemberNames()) {
63 LdifUser role;
64 if (userAdmin.groups.containsKey(ldapName))
65 role = userAdmin.groups.get(ldapName);
66 else if (userAdmin.users.containsKey(ldapName))
67 role = userAdmin.users.get(ldapName);
68 else
69 throw new ArgeoUserAdminException("No roel found for "
70 + ldapName);
71 role.directMemberOf.add(this);
72 directMembers.add(role);
73 }
74 }
75
76 List<LdapName> getMemberNames() {
77 Attribute memberAttribute = getAttributes().get("member");
78 if (memberAttribute == null)
79 return new ArrayList<LdapName>();
80 try {
81 List<LdapName> roles = new ArrayList<LdapName>();
82 NamingEnumeration<?> values = memberAttribute.getAll();
83 while (values.hasMore()) {
84 LdapName dn = new LdapName(values.next().toString());
85 roles.add(dn);
86 }
87 return roles;
88 } catch (Exception e) {
89 throw new ArgeoUserAdminException("Cannot get members", e);
90 }
91 }
92
93 @Override
94 public Role[] getRequiredMembers() {
95 throw new UnsupportedOperationException();
96 }
97
98 @Override
99 public int getType() {
100 return GROUP;
101 }
102 }