package org.argeo.util.directory.ldap;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Dictionary;
import java.util.List;
+import java.util.Set;
+import java.util.StringJoiner;
+import java.util.TreeSet;
import javax.naming.directory.Attributes;
import javax.naming.ldap.LdapName;
+import org.argeo.util.naming.LdapAttrs;
+
+/** An LDAP entry. */
public interface LdapEntry {
LdapName getDn();
void publishAttributes(Attributes modifiedAttributes);
- public List<LdapName> getReferences(String attributeId);
-
- public Dictionary<String, Object> getProperties();
-
- public boolean hasCredential(String key, Object value) ;
-
+ List<LdapName> getReferences(String attributeId);
+
+ Dictionary<String, Object> getProperties();
+
+ boolean hasCredential(String key, Object value);
+
+ /*
+ * UTILITIES
+ */
+ /**
+ * Convert a collection of object classes to the format expected by an LDAP
+ * backend.
+ */
+ public static void addObjectClasses(Dictionary<String, Object> properties, Collection<String> objectClasses) {
+ String value = properties.get(LdapAttrs.objectClasses.name()).toString();
+ Set<String> currentObjectClasses = new TreeSet<>(Arrays.asList(value.toString().split("\n")));
+ currentObjectClasses.addAll(objectClasses);
+ StringJoiner values = new StringJoiner("\n");
+ currentObjectClasses.forEach((s) -> values.add(s));
+ properties.put(LdapAttrs.objectClasses.name(), values.toString());
+ }
}