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 <b...@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() {