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()
{