Improve and simplify OSGi Boot
[lgpl/argeo-commons.git] / org.argeo.security.core / src / org / argeo / osgi / useradmin / LdifGroup.java
index 3e9d44750b2ef333326d36cf2a971483c74b61e4..bd129119b2592366a49fdba8582fa892d9795e0c 100644 (file)
@@ -10,10 +10,11 @@ import javax.naming.ldap.LdapName;
 
 import org.osgi.service.useradmin.Role;
 
-public class LdifGroup extends LdifUser implements DirectoryGroup {
+/** Directory group implementation */
+class LdifGroup extends LdifUser implements DirectoryGroup {
        private final String memberAttributeId;
 
-       public LdifGroup(AbstractUserDirectory userAdmin, LdapName dn,
+       LdifGroup(AbstractUserDirectory userAdmin, LdapName dn,
                        Attributes attributes) {
                super(userAdmin, dn, attributes);
                memberAttributeId = userAdmin.getMemberAttributeId();
@@ -21,10 +22,16 @@ public class LdifGroup extends LdifUser implements DirectoryGroup {
 
        @Override
        public boolean addMember(Role role) {
+               getUserAdmin().checkEdit();
+               if (!isEditing())
+                       startEditing();
+
                Attribute member = getAttributes().get(memberAttributeId);
                if (member != null) {
                        if (member.contains(role.getName()))
                                return false;
+                       else
+                               member.add(role.getName());
                } else
                        getAttributes().put(memberAttributeId, role.getName());
                return true;
@@ -37,6 +44,10 @@ public class LdifGroup extends LdifUser implements DirectoryGroup {
 
        @Override
        public boolean removeMember(Role role) {
+               getUserAdmin().checkEdit();
+               if (!isEditing())
+                       startEditing();
+
                Attribute member = getAttributes().get(memberAttributeId);
                if (member != null) {
                        if (!member.contains(role.getName()))