]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/directory/ldap/LdapEntry.java
Improve ACR attribute typing.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / directory / ldap / LdapEntry.java
1 package org.argeo.cms.directory.ldap;
2
3 import java.util.Arrays;
4 import java.util.Collection;
5 import java.util.Dictionary;
6 import java.util.List;
7 import java.util.Locale;
8 import java.util.Set;
9 import java.util.StringJoiner;
10 import java.util.TreeSet;
11
12 import javax.naming.directory.Attributes;
13 import javax.naming.ldap.LdapName;
14
15 import org.argeo.api.acr.ldap.LdapAttr;
16
17 /** An LDAP entry. */
18 public interface LdapEntry {
19 LdapName getDn();
20
21 Attributes getAttributes();
22
23 void publishAttributes(Attributes modifiedAttributes);
24
25 List<LdapName> getReferences(String attributeId);
26
27 Dictionary<String, Object> getProperties();
28
29 boolean hasCredential(String key, Object value);
30
31 /*
32 * UTILITIES
33 */
34 /**
35 * Convert a collection of object classes to the format expected by an LDAP
36 * backend.
37 */
38 public static void addObjectClasses(Dictionary<String, Object> properties, Collection<String> objectClasses) {
39 String value = properties.get(LdapAttr.objectClasses.name()).toString();
40 Set<String> currentObjectClasses = new TreeSet<>(Arrays.asList(value.toString().split("\n")));
41 currentObjectClasses.addAll(objectClasses);
42 StringJoiner values = new StringJoiner("\n");
43 currentObjectClasses.forEach((s) -> values.add(s));
44 properties.put(LdapAttr.objectClasses.name(), values.toString());
45 }
46
47 public static Object getLocalized(Dictionary<String, Object> properties, String key, Locale locale) {
48 if (locale == null)
49 return null;
50 Object value = null;
51 value = properties.get(key + ";lang-" + locale.getLanguage() + "-" + locale.getCountry());
52 if (value == null)
53 value = properties.get(key + ";lang-" + locale.getLanguage());
54 return value;
55 }
56
57 public static String toLocalizedKey(String key, Locale locale) {
58 String country = locale.getCountry();
59 if ("".equals(country)) {
60 return key + ";lang-" + locale.getLanguage();
61 } else {
62 return key + ";lang-" + locale.getLanguage() + "-" + locale.getCountry();
63 }
64 }
65 }