Alexander Wels has uploaded a new change for review.

Change subject: userportal,webadmin: Fix behavior unsupported locale
......................................................................

userportal,webadmin: Fix behavior unsupported locale

- Changed behavior to select en_US locale if the browser
returns an unsupported locale.
- Changed behavior to select close enough locale if the
browser returns a close but unsupported locale for instance
if the browser return es, then it will be transformed into
es_ES as that is 'close'

Change-Id: Ic5beceaf7f4ce2333e83cd72c3fa8721103cf805
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=838456
Signed-off-by: Alexander Wels <[email protected]>
---
M 
backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java
M 
backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java
M 
backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java
3 files changed, 51 insertions(+), 28 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/15520/1

diff --git 
a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java
 
b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java
index 8f62ba4..f2b70d6 100644
--- 
a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java
+++ 
b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/LocaleFilter.java
@@ -1,7 +1,10 @@
 package org.ovirt.engine.core;
 
 import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
 import java.util.Locale;
+import java.util.ResourceBundle;
 
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
@@ -37,6 +40,11 @@
      */
     public static final String LOCALE = "locale";
 
+    /**
+     * The extension of the properties file containing the available languages.
+     */
+    private static final String LANGUAGES = ".languages"; //the resource 
bundle name
+
     @Override
     public void doFilter(final ServletRequest request, final ServletResponse 
response,
             final FilterChain chain) throws IOException, ServletException {
@@ -71,7 +79,7 @@
             locale = Locale.US;
         }
         log.debug("Filter determined locale to be: " + locale.toLanguageTag());
-        return locale;
+        return lookupSupportedLocale(locale, getLocaleKeys());
     }
 
     /**
@@ -92,6 +100,43 @@
         return locale;
     }
 
+    /**
+     * Get a list of available locales.
+     * @return A {@code List} of Locale strings.
+     */
+    public static List<String> getLocaleKeys() {
+        ResourceBundle bundle = 
ResourceBundle.getBundle(LocaleFilter.class.getPackage().getName() + LANGUAGES,
+                Locale.US);
+        List<String> keys = Collections.list(bundle.getKeys());
+        //Can't just return the unsorted list, it won't match the GWT output.
+        //Apparently GWT does a sort before showing the list as well, which
+        //works out nicely for me.
+        Collections.sort(keys);
+        return keys;
+    }
+
+    /**
+     *
+     * @param filteredLocale The locale the filter determined.
+     * @param supportedLocales The list of supported locale strings.
+     * @return The supported locale based on the passed in filteredLocale and 
list of supported locales.
+     */
+    private Locale lookupSupportedLocale(final Locale filteredLocale, final 
List<String> supportedLocales) {
+        for (String localeString: supportedLocales) {
+            Locale locale = LocaleUtils.getLocaleFromString(localeString);
+            @SuppressWarnings("unchecked")
+            List<Locale> localeLookupList = 
org.apache.commons.lang.LocaleUtils.localeLookupList(locale);
+            for (Locale lookupLocale: localeLookupList) {
+                if (lookupLocale.equals(filteredLocale)) {
+                    // Matched on one of the locales. Find the supported one 
in the list.
+                    return locale;
+                }
+            }
+        }
+        // When branding patch is merged update me to say 
LocaleFilter.defaultLocale
+        return Locale.US;
+    }
+
     @Override
     public void init(final FilterConfig filterConfig) throws ServletException {
         //Do nothing
diff --git 
a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java
 
b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java
index ce72ad6..888539d 100644
--- 
a/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java
+++ 
b/backend/manager/modules/root/src/main/java/org/ovirt/engine/core/SplashServlet.java
@@ -1,10 +1,7 @@
 package org.ovirt.engine.core;
 
 import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
 import java.util.Locale;
-import java.util.ResourceBundle;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
@@ -36,17 +33,12 @@
      */
     private static final String LOCALE_KEYS = "localeKeys";
 
-    /**
-     * The extension of the properties file containing the available languages.
-     */
-    private static final String LANGUAGES = ".languages"; //the resource 
bundle name
-
     @Override
     protected void doGet(final HttpServletRequest request, final 
HttpServletResponse response) throws IOException,
         ServletException {
         Locale userLocale = (Locale) request.getAttribute(LocaleFilter.LOCALE);
         log.info("Detected Locale: " + userLocale.toLanguageTag());
-        request.setAttribute(LOCALE_KEYS, getLocaleKeys());
+        request.setAttribute(LOCALE_KEYS, LocaleFilter.getLocaleKeys());
         setCookie(response, userLocale);
         RequestDispatcher dispatcher = 
request.getRequestDispatcher("/WEB-INF/ovirt-engine.jsp");
         response.setContentType("text/html;charset=UTF-8");
@@ -68,19 +60,5 @@
         // This cookie never expires
         cookie.setMaxAge(Integer.MAX_VALUE);
         response.addCookie(cookie);
-    }
-
-    /**
-     * Get a list of available locales.
-     * @return A {@code List} of Locale strings.
-     */
-    private List<String> getLocaleKeys() {
-        ResourceBundle bundle = 
ResourceBundle.getBundle(this.getClass().getPackage().getName() + LANGUAGES, 
Locale.US);
-        List<String> keys = Collections.list(bundle.getKeys());
-        //Can't just return the unsorted list, it won't match the GWT output.
-        //Apparently GWT does a sort before showing the list as well, which
-        //works out nicely for me.
-        Collections.sort(keys);
-        return keys;
     }
 }
diff --git 
a/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java
 
b/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java
index 0345426..31451db 100644
--- 
a/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java
+++ 
b/backend/manager/modules/root/src/test/java/org/ovirt/engine/core/LocaleFilterTest.java
@@ -38,7 +38,7 @@
 
     @Test
     public void testDoFilterFromParameter() throws IOException, 
ServletException {
-        Locale testLocale = Locale.ITALIAN;
+        Locale testLocale = Locale.GERMANY;
         
when(mockRequest.getParameter(LocaleFilter.LOCALE)).thenReturn(testLocale.toString());
         testFilter.doFilter(mockRequest, mockResponse, mockChain);
         verify(mockChain).doFilter(mockRequest, mockResponse);
@@ -47,7 +47,7 @@
 
     @Test
     public void testDoFilterFromParameterWithCookie() throws IOException, 
ServletException {
-        Locale testLocale = Locale.ITALIAN;
+        Locale testLocale = Locale.JAPAN;
         Cookie[] cookies = createCookies(Locale.GERMAN);
         
when(mockRequest.getParameter(LocaleFilter.LOCALE)).thenReturn(testLocale.toString());
         when(mockRequest.getCookies()).thenReturn(cookies);
@@ -58,7 +58,7 @@
 
     @Test
     public void testDoFilterFromCookie() throws IOException, ServletException {
-        Locale testLocale = Locale.ITALIAN;
+        Locale testLocale = Locale.GERMANY;
         Cookie[] cookies = createCookies(testLocale);
         when(mockRequest.getCookies()).thenReturn(cookies);
         testFilter.doFilter(mockRequest, mockResponse, mockChain);
@@ -92,7 +92,7 @@
         when(mockRequest.getLocale()).thenReturn(Locale.JAPANESE);
         testFilter.doFilter(mockRequest, mockResponse, mockChain);
         verify(mockChain).doFilter(mockRequest, mockResponse);
-        verify(mockRequest).setAttribute(LocaleFilter.LOCALE, Locale.JAPANESE);
+        verify(mockRequest).setAttribute(LocaleFilter.LOCALE, Locale.JAPAN);
     }
 
     @Test


-- 
To view, visit http://gerrit.ovirt.org/15520
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic5beceaf7f4ce2333e83cd72c3fa8721103cf805
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to