You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by be...@apache.org on 2022/08/28 13:28:11 UTC

[tapestry-5] branch master updated: TAP5-2735: LocalizationSetter setNonPersistentLocaleFromRequest added

This is an automated email from the ASF dual-hosted git repository.

benw pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git


The following commit(s) were added to refs/heads/master by this push:
     new ccc385001 TAP5-2735: LocalizationSetter setNonPersistentLocaleFromRequest added
ccc385001 is described below

commit ccc3850012f81a99c7bfb1ab30b20985f37b5b00
Author: Ben Weidig <be...@netzgut.net>
AuthorDate: Sun Aug 28 14:44:31 2022 +0200

    TAP5-2735: LocalizationSetter setNonPersistentLocaleFromRequest added
    
    Request-based locale handling was previously in ComponentEventLinkEncoderImpl, preventing any customization.
---
 .../services/ComponentEventLinkEncoderImpl.java    | 13 ++-----------
 .../internal/services/LocalizationSetterImpl.java  |  6 ++++++
 .../tapestry5/services/LocalizationSetter.java     | 17 ++++++++++++++---
 .../services/ComponentEventDispatcherTest.java     |  3 +--
 .../ComponentEventLinkEncoderImplTest.java         |  9 +++------
 .../services/LocalizationSetterImplTest.java       | 22 +++++++++++++++++++++-
 6 files changed, 47 insertions(+), 23 deletions(-)

diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
index 9fab5eae9..7e7129524 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
@@ -341,7 +341,7 @@ public class ComponentEventLinkEncoderImpl implements ComponentEventLinkEncoder
 
                 if (explicitLocale == null)
                 {
-                    setLocaleFromRequest(request);
+                    localizationSetter.setNonPersistentLocaleFromRequest(request);
                 } else
                 {
                     localizationSetter.setLocaleFromLocaleName(explicitLocale);
@@ -387,15 +387,6 @@ public class ComponentEventLinkEncoderImpl implements ComponentEventLinkEncoder
                 activationContext, eventContext);
     }
 
-    private void setLocaleFromRequest(Request request)
-    {
-        Locale locale = request.getLocale();
-
-        // And explicit locale will have invoked setLocaleFromLocaleName().
-
-        localizationSetter.setNonPersistentLocaleFromLocaleName(locale.toString());
-    }
-
     public PageRenderRequestParameters decodePageRenderRequest(Request request)
     {
         boolean explicitLocale = false;
@@ -468,7 +459,7 @@ public class ComponentEventLinkEncoderImpl implements ComponentEventLinkEncoder
 
         if (result != null && !explicitLocale)
         {
-            setLocaleFromRequest(request);
+            localizationSetter.setNonPersistentLocaleFromRequest(request);
         }
 
         return result;
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java
index 1976d39c3..b2962ca57 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/LocalizationSetterImpl.java
@@ -160,6 +160,12 @@ public class LocalizationSetterImpl implements LocalizationSetter
 
         threadLocale.setLocale(supported);
     }
+    
+    public void setNonPersistentLocaleFromRequest(Request request)
+    {
+        Locale locale = request.getLocale();
+        setNonPersistentLocaleFromLocaleName(locale.toString());
+    }
 
     private Locale findClosestSupportedLocale(Locale desiredLocale)
     {
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/services/LocalizationSetter.java b/tapestry-core/src/main/java/org/apache/tapestry5/services/LocalizationSetter.java
index 0555cd7dd..99d4d38e3 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/services/LocalizationSetter.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/services/LocalizationSetter.java
@@ -12,12 +12,13 @@
 
 package org.apache.tapestry5.services;
 
-import org.apache.tapestry5.SelectModel;
-import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
-
 import java.util.List;
 import java.util.Locale;
 
+import org.apache.tapestry5.SelectModel;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.ioc.annotations.IncompatibleChange;
+
 /**
  * Sets the thread's locale given a desired locale. Note that the desired locale is just a hint. It will try to honor it
  * but there is no guarantee that it will be used as is.
@@ -54,6 +55,16 @@ public interface LocalizationSetter
     @IncompatibleChange(release = "5.4", details = "typo is method name corrected")
     void setNonPersistentLocaleFromLocaleName(String localeName);
 
+    /**
+     * Allows the locale to be set from the locale of the client as determined from the request headers (which may
+     * be narrowed or defaulted to a supported locale). Does not set the persistent locale.
+     * 
+     * @param request
+     *            incoming request
+     * @since 5.8.3
+     */
+    void setNonPersistentLocaleFromRequest(Request request);
+
     /**
      * Returns a list of supported locales, as per the {@link org.apache.tapestry5.SymbolConstants#SUPPORTED_LOCALES}
      * symbol.
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java
index 219a98d28..60418b59b 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java
@@ -302,8 +302,7 @@ public class ComponentEventDispatcherTest extends InternalBaseTestCase
 
     private void train_for_request_locale(Request request, LocalizationSetter localizationSetter)
     {
-        train_getLocale(request, Locale.CANADA_FRENCH);
-        localizationSetter.setNonPersistentLocaleFromLocaleName("fr_CA");
+        localizationSetter.setNonPersistentLocaleFromRequest(request);
     }
 
     @Test
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
index 22bd5fc09..5a809c97c 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java
@@ -239,8 +239,7 @@ public class ComponentEventLinkEncoderImplTest extends InternalBaseTestCase
 
         train_canonicalizePageName(resolver, "", "index");
 
-        train_getLocale(request, Locale.ITALIAN);
-        ls.setNonPersistentLocaleFromLocaleName("it");
+        ls.setNonPersistentLocaleFromRequest(request);
 
         replay();
 
@@ -427,9 +426,8 @@ public class ComponentEventLinkEncoderImplTest extends InternalBaseTestCase
 
         train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null);
         train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null);
-        train_getLocale(request, Locale.ENGLISH);
 
-        ls.setNonPersistentLocaleFromLocaleName("en");
+        ls.setNonPersistentLocaleFromRequest(request);
 
         String path = "/foo-bar/baz.biff";
         train_getPath(request, path);
@@ -465,9 +463,8 @@ public class ComponentEventLinkEncoderImplTest extends InternalBaseTestCase
 
         train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null);
         train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null);
-        train_getLocale(request, Locale.ENGLISH);
 
-        ls.setNonPersistentLocaleFromLocaleName("en");
+        ls.setNonPersistentLocaleFromRequest(request);
 
         train_getPath(request, "/foo/bar/page.component:event");
 
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LocalizationSetterImplTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LocalizationSetterImplTest.java
index 90502c301..8aa409b6d 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LocalizationSetterImplTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/LocalizationSetterImplTest.java
@@ -205,7 +205,27 @@ public class LocalizationSetterImplTest extends InternalBaseTestCase
         verify();
 
     }
-   
+
+    @Test
+    public void set_nonpersistent_locale_from_request()
+    {
+        PersistentLocale pl = mockPersistentLocale();
+        ThreadLocale tl = mockThreadLocale();
+        Request request = mockRequest();
+
+        tl.setLocale(Locale.FRENCH);
+
+        train_getLocale(request, Locale.CANADA_FRENCH);
+
+        replay();
+
+        LocalizationSetterImpl setter = new LocalizationSetterImpl(request, pl, tl, "en,fr");
+
+        setter.setNonPersistentLocaleFromRequest(request);
+
+        verify();
+    }
+
     @Test
     public void is_supported_locale_name()
     {