[java-identity-provider] 01/11: IDP-1464 use new functions for Locale Selection for consent

Rod Widdowson rdw at steadingsoftware.com
Tue Jun 11 09:38:19 EDT 2019


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=c02a3cb3a6bf81133a0f6ca189bb0f113d100760

commit c02a3cb3a6bf81133a0f6ca189bb0f113d100760
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Jun 7 13:48:52 2019 +0100

    IDP-1464 use new functions for Locale Selection for consent
    
    https://issues.shibboleth.net/jira/browse/IDP-1464
    
    Java 8 introduced standards compliant Locale handling.
    Use them so we don't have to worry about it.
---
 .../impl/AbstractAttributeDisplayFunction.java     | 59 +++++++++++-----------
 1 file changed, 30 insertions(+), 29 deletions(-)

diff --git a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AbstractAttributeDisplayFunction.java b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AbstractAttributeDisplayFunction.java
index df380b8..fcc161c 100644
--- a/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AbstractAttributeDisplayFunction.java
+++ b/idp-consent-impl/src/main/java/net/shibboleth/idp/consent/logic/impl/AbstractAttributeDisplayFunction.java
@@ -17,18 +17,21 @@
 
 package net.shibboleth.idp.consent.logic.impl;
 
-import java.util.ArrayList;
-import java.util.Enumeration;
+import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
+import java.util.Locale.LanguageRange;
 import java.util.Map;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.servlet.http.HttpServletRequest;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
+import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.net.HttpServletSupport;
 
 /**
  * Abstract Function which returns {@link Locale}-aware information about an attribute. The abstract method
@@ -37,9 +40,13 @@ import net.shibboleth.idp.attribute.IdPAttribute;
  */
 public abstract class AbstractAttributeDisplayFunction implements Function<IdPAttribute, String> {
 
-    /** Desired locales in order of preference. */
-    @Nonnull private final List<Locale> locales;
+    /** The range of locales from the request. */
+    @Nonnull @Unmodifiable private final List<Locale.LanguageRange> languageRange;
 
+    /** The tags for the fallback languages. */
+    @Nonnull @Unmodifiable private final List<Locale.LanguageRange> defaultLanguageRange;
+
+    
     /**
      * Constructor.
      * 
@@ -49,20 +56,16 @@ public abstract class AbstractAttributeDisplayFunction implements Function<IdPAt
     public AbstractAttributeDisplayFunction(@Nonnull final HttpServletRequest request,
             @Nullable final List<String> defaultLanguages) {
 
-        final List<Locale> newLocales = new ArrayList<>();
-
-        final Enumeration<Locale> requestLocales = request.getLocales();
-        while (requestLocales.hasMoreElements()) {
-            newLocales.add(requestLocales.nextElement());
+        languageRange = HttpServletSupport.getLanguageRange(request);
+        if (defaultLanguages == null || defaultLanguages.isEmpty()) {
+            defaultLanguageRange = Collections.EMPTY_LIST;
+        } else {
+            defaultLanguageRange = defaultLanguages.
+                    stream().
+                    filter(e -> e != null).
+                    map(s -> new LanguageRange(s)).
+                    collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
         }
-        if (null != defaultLanguages) {
-            for (final String s : defaultLanguages) {
-                if (null != s) {
-                    newLocales.add(new Locale(s));
-                }
-            }
-        }
-        locales = newLocales;
     }
 
     /** {@inheritDoc} */
@@ -70,20 +73,18 @@ public abstract class AbstractAttributeDisplayFunction implements Function<IdPAt
         if (input == null) {
             return "N/A";
         }
+        
         final Map<Locale, String> displayInfo = getDisplayInfo(input);
-        if (null != displayInfo && !displayInfo.isEmpty()) {
-            for (final Locale locale : locales) {
-                String toBeDisplayed = displayInfo.get(locale);
-                if (toBeDisplayed != null) {
-                    return toBeDisplayed;
-                }
-                toBeDisplayed = displayInfo.get(Locale.forLanguageTag(locale.getLanguage()));
-                if (toBeDisplayed != null) {
-                    return toBeDisplayed;
-                }
-            }
+        
+        Locale locale = Locale.lookup(languageRange, displayInfo.keySet());
+        if (locale == null) {
+            locale = Locale.lookup(defaultLanguageRange, displayInfo.keySet());
+        }
+        if (locale == null) {
+            return input.getId();
+        } else {
+            return displayInfo.get(locale);
         }
-        return input.getId();
     }
 
     /**

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list