package org.argeo.cms.directory.ldap; import java.util.Arrays; import java.util.Collection; import java.util.Dictionary; import java.util.List; import java.util.Locale; 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.api.acr.ldap.LdapAttr; /** An LDAP entry. */ public interface LdapEntry { LdapName getDn(); Attributes getAttributes(); //void publishAttributes(Attributes modifiedAttributes); List getReferences(String attributeId); Dictionary 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 properties, Collection objectClasses) { String value = properties.get(LdapAttr.objectClasses.name()).toString(); Set 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(LdapAttr.objectClasses.name(), values.toString()); } public static Object getLocalized(Dictionary properties, String key, Locale locale) { if (locale == null) return null; Object value = null; value = properties.get(key + ";lang-" + locale.getLanguage() + "-" + locale.getCountry()); if (value == null) value = properties.get(key + ";lang-" + locale.getLanguage()); return value; } public static String toLocalizedKey(String key, Locale locale) { String country = locale.getCountry(); if ("".equals(country)) { return key + ";lang-" + locale.getLanguage(); } else { return key + ";lang-" + locale.getLanguage() + "-" + locale.getCountry(); } } }