- @Override
- public Role createRole(String name, int type) {
- try {
- LdapName dn = new LdapName(name);
- if (users.containsKey(dn) || groups.containsKey(dn))
- throw new ArgeoUserAdminException("Already a role " + name);
-
- BasicAttributes attrs = new BasicAttributes();
- attrs.put("dn", dn.toString());
- Rdn nameRdn = dn.getRdn(dn.size() - 1);
- // TODO deal with multiple attr RDN
- attrs.put(nameRdn.getType(), nameRdn.getValue());
- LdifUser newRole;
- if (type == Role.USER) {
- newRole = new LdifUser(dn, attrs);
- users.put(dn, newRole);
- } else if (type == Role.GROUP) {
- newRole = new LdifGroup(dn, attrs);
- groups.put(dn, (LdifGroup) newRole);
- } else
- throw new ArgeoUserAdminException("Unsupported type " + type);
- return newRole;
- } catch (InvalidNameException e) {
- throw new ArgeoUserAdminException("Cannot create role " + name, e);
- }
- }
-
- @Override
- public boolean removeRole(String name) {
- try {
- LdapName dn = new LdapName(name);
- LdifUser role = null;
- if (users.containsKey(dn))
- role = users.remove(dn);
- else if (groups.containsKey(dn))
- role = groups.remove(dn);
- else
- throw new ArgeoUserAdminException("There is no role " + name);
- if (role == null)
- return false;
- for (LdifGroup group : role.directMemberOf) {
- group.directMembers.remove(role);
- group.getAttributes().get(group.getMemberAttrName())
- .remove(dn.toString());
- }
- if (role instanceof LdifGroup) {
- LdifGroup group = (LdifGroup) role;
- for (Role user : group.directMembers) {
- if (user instanceof LdifUser)
- ((LdifUser) user).directMemberOf.remove(group);
- }
- }
- return true;
- } catch (InvalidNameException e) {
- throw new ArgeoUserAdminException("Cannot create role " + name, e);
- }
- }
-
- @Override
- public Role[] getRoles(String filter) throws InvalidSyntaxException {
- ArrayList<Role> res = new ArrayList<Role>();
- if (filter == null) {