From: Mathieu Baudier Date: Fri, 23 Sep 2022 07:57:18 +0000 (+0200) Subject: Support i18n in directory X-Git-Tag: v2.3.10~26 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=a2282a88386d907502ff29c3d6c89550331feeff Support i18n in directory --- diff --git a/org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java b/org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java index 1acd34f48..947b6bc85 100644 --- a/org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java +++ b/org.argeo.util/src/org/argeo/util/directory/HierarchyUnit.java @@ -1,12 +1,16 @@ package org.argeo.util.directory; import java.util.Dictionary; +import java.util.Locale; /** A unit within the high-level organisational structure of a directory. */ public interface HierarchyUnit { /** Name to use in paths. */ String getHierarchyUnitName(); + /** Name to use in UI. */ + String getHierarchyUnitLabel(Locale locale); + /** * The parent {@link HierarchyUnit}, or null if a * {@link Directory}. diff --git a/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java b/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java index 04398bb4b..28d8d081c 100644 --- a/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java +++ b/org.argeo.util/src/org/argeo/util/directory/ldap/AbstractLdapDirectory.java @@ -10,6 +10,7 @@ import java.util.Dictionary; import java.util.Enumeration; import java.util.Hashtable; import java.util.List; +import java.util.Locale; import java.util.Optional; import java.util.StringJoiner; @@ -296,6 +297,16 @@ public abstract class AbstractLdapDirectory implements Directory, XAResourceProv return getName(); } + @Override + public String getHierarchyUnitLabel(Locale locale) { + String key = LdapNameUtils.getLastRdn(getBaseDn()).getType(); + Object value = LdapEntry.getLocalized(asLdapEntry().getProperties(), key, locale); + if (value == null) + value = getHierarchyUnitName(); + assert value != null; + return value.toString(); + } + @Override public HierarchyUnit getParent() { return null; diff --git a/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java b/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java index c4d20feba..218e0c57e 100644 --- a/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java +++ b/org.argeo.util/src/org/argeo/util/directory/ldap/DefaultLdapEntry.java @@ -35,8 +35,8 @@ public class DefaultLdapEntry implements LdapEntry { // private Attributes publishedAttributes; // Temporarily expose the fields - protected AttributeDictionary properties; - protected AttributeDictionary credentials; + private AttributeDictionary properties; + private AttributeDictionary credentials; protected DefaultLdapEntry(AbstractLdapDirectory directory, LdapName dn) { Objects.requireNonNull(directory); diff --git a/org.argeo.util/src/org/argeo/util/directory/ldap/LdapEntry.java b/org.argeo.util/src/org/argeo/util/directory/ldap/LdapEntry.java index f34de7eb5..823bc9502 100644 --- a/org.argeo.util/src/org/argeo/util/directory/ldap/LdapEntry.java +++ b/org.argeo.util/src/org/argeo/util/directory/ldap/LdapEntry.java @@ -4,6 +4,7 @@ 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; @@ -42,4 +43,14 @@ public interface LdapEntry { currentObjectClasses.forEach((s) -> values.add(s)); properties.put(LdapAttrs.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; + } } diff --git a/org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java b/org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java index bd12244ea..961f2e358 100644 --- a/org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java +++ b/org.argeo.util/src/org/argeo/util/directory/ldap/LdapHierarchyUnit.java @@ -1,5 +1,7 @@ package org.argeo.util.directory.ldap; +import java.util.Locale; + import javax.naming.ldap.LdapName; import javax.naming.ldap.Rdn; @@ -39,6 +41,16 @@ public class LdapHierarchyUnit extends DefaultLdapEntry implements HierarchyUnit return name; } + @Override + public String getHierarchyUnitLabel(Locale locale) { + String key = LdapNameUtils.getLastRdn(getDn()).getType(); + Object value = LdapEntry.getLocalized(getProperties(), key, locale); + if (value == null) + value = getHierarchyUnitName(); + assert value != null; + return value.toString(); + } + @Override public String getBase() { return getDn().toString(); diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/CmsFeedback.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/CmsFeedback.java index 69b117849..91885c74b 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/CmsFeedback.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/CmsFeedback.java @@ -8,6 +8,7 @@ import org.argeo.api.cms.CmsLog; import org.argeo.cms.CmsMsg; import org.argeo.cms.swt.Selected; import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -95,6 +96,13 @@ public class CmsFeedback extends LightweightDialog { return messageLbl; } + protected Point getInitialSize() { + if (exception != null) + return new Point(800, 600); + else + return new Point(600, 400); + } + protected void append(String message) { stack.append(message); stack.append("\n"); diff --git a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/LightweightDialog.java b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/LightweightDialog.java index 9e6a8d5b0..d74be6aa2 100644 --- a/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/LightweightDialog.java +++ b/swt/org.argeo.cms.swt/src/org/argeo/cms/swt/dialogs/LightweightDialog.java @@ -183,9 +183,6 @@ public class LightweightDialog { } protected Point getInitialSize() { - // if (exception != null) - // return new Point(800, 600); - // else return new Point(600, 400); }