]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.security.core/src/org/argeo/osgi/useradmin/LdifGroup.java
Use Argeo TP v2.1.10
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / osgi / useradmin / LdifGroup.java
index 845094820c84e897df2844ce31e83ed8e20d7eac..a19052425491759a9c2c55687522fa9532a49397 100644 (file)
@@ -10,18 +10,32 @@ import javax.naming.ldap.LdapName;
 
 import org.osgi.service.useradmin.Group;
 import org.osgi.service.useradmin.Role;
+import org.osgi.service.useradmin.UserAdmin;
 
 public class LdifGroup extends LdifUser implements Group {
        // optimisation
-       List<Role> directMembers = null;
+       // List<Role> directMembers = null;
 
-       public LdifGroup(LdapName dn, Attributes attributes) {
+       private final UserAdmin userAdmin;
+       private String memberAttrName = "member";
+
+       public LdifGroup(UserAdmin userAdmin, LdapName dn, Attributes attributes) {
                super(dn, attributes);
+               this.userAdmin = userAdmin;
        }
 
        @Override
        public boolean addMember(Role role) {
-               throw new UnsupportedOperationException();
+               Attribute member = getAttributes().get(memberAttrName);
+               if (member != null) {
+                       if (member.contains(role.getName()))
+                               return false;
+               } else
+                       getAttributes().put(memberAttrName, role.getName());
+               // directMembers.add(role);
+               // if (role instanceof LdifUser)
+               // ((LdifUser) role).directMemberOf.add(this);
+               return true;
        }
 
        @Override
@@ -31,17 +45,46 @@ public class LdifGroup extends LdifUser implements Group {
 
        @Override
        public boolean removeMember(Role role) {
-               throw new UnsupportedOperationException();
+               Attribute member = getAttributes().get(memberAttrName);
+               if (member != null) {
+                       if (!member.contains(role.getName()))
+                               return false;
+                       member.remove(role.getName());
+                       // directMembers.remove(role);
+                       // if (role instanceof LdifUser)
+                       // ((LdifUser) role).directMemberOf.remove(this);
+                       return true;
+               } else
+                       return false;
        }
 
        @Override
        public Role[] getMembers() {
-               if (directMembers != null)
-                       return directMembers.toArray(new Role[directMembers.size()]);
-               else
-                       throw new ArgeoUserAdminException("Members have not been loaded.");
+               List<Role> directMembers = new ArrayList<Role>();
+               for (LdapName ldapName : getMemberNames()) {
+                       Role role = userAdmin.getRole(ldapName.toString());
+                       if (role == null && userAdmin instanceof AbstractLdapUserAdmin) {
+                               AbstractLdapUserAdmin ua = (AbstractLdapUserAdmin) userAdmin;
+                               if (ua.getExternalRoles() != null)
+                                       role = ua.getExternalRoles().getRole(ldapName.toString());
+                       }
+                       if (role == null)
+                               throw new ArgeoUserAdminException("No role found for "
+                                               + ldapName);
+
+                       // role.directMemberOf.add(group);
+                       // if (!directMemberOf.containsKey(role.getDn()))
+                       // directMemberOf.put(role.getDn(), new ArrayList<LdifGroup>());
+                       // directMemberOf.get(role.getDn()).add(group);
+                       directMembers.add(role);
+               }
+               return directMembers.toArray(new Role[directMembers.size()]);
+               // if (directMembers != null)
+               // return directMembers.toArray(new Role[directMembers.size()]);
+               // else
+               // throw new ArgeoUserAdminException("Members have not been loaded.");
 
-               // Attribute memberAttribute = getAttributes().get("member");
+               // Attribute memberAttribute = getAttributes().get(memberAttrName);
                // if (memberAttribute == null)
                // return new Role[0];
                // try {
@@ -57,29 +100,29 @@ public class LdifGroup extends LdifUser implements Group {
                // }
        }
 
-       void loadMembers(LdifUserAdmin userAdmin) {
-               directMembers = new ArrayList<Role>();
-               for (LdapName ldapName : getMemberNames()) {
-                       LdifUser role;
-                       if (userAdmin.groups.containsKey(ldapName))
-                               role = userAdmin.groups.get(ldapName);
-                       else if (userAdmin.users.containsKey(ldapName))
-                               role = userAdmin.users.get(ldapName);
-                       else
-                               throw new ArgeoUserAdminException("No roel found for "
-                                               + ldapName);
-                       role.directMemberOf.add(this);
-                       directMembers.add(role);
-               }
-       }
+       // void loadMembers(LdifUserAdmin userAdmin) {
+       // directMembers = new ArrayList<Role>();
+       // for (LdapName ldapName : getMemberNames()) {
+       // LdifUser role;
+       // if (userAdmin.groups.containsKey(ldapName))
+       // role = userAdmin.groups.get(ldapName);
+       // else if (userAdmin.users.containsKey(ldapName))
+       // role = userAdmin.users.get(ldapName);
+       // else
+       // throw new ArgeoUserAdminException("No role found for "
+       // + ldapName);
+       // role.directMemberOf.add(this);
+       // directMembers.add(role);
+       // }
+       // }
 
        List<LdapName> getMemberNames() {
-               Attribute memberAttribute = getAttributes().get("member");
+               Attribute memberAttribute = getAttributes().get(memberAttrName);
                if (memberAttribute == null)
                        return new ArrayList<LdapName>();
                try {
                        List<LdapName> roles = new ArrayList<LdapName>();
-                       NamingEnumeration values = memberAttribute.getAll();
+                       NamingEnumeration<?> values = memberAttribute.getAll();
                        while (values.hasMore()) {
                                LdapName dn = new LdapName(values.next().toString());
                                roles.add(dn);
@@ -99,4 +142,9 @@ public class LdifGroup extends LdifUser implements Group {
        public int getType() {
                return GROUP;
        }
+
+       public String getMemberAttrName() {
+               return memberAttrName;
+       }
+
 }