Alexander Wels has uploaded a new change for review.

Change subject: engine,userportal,webadmin: configurable unsupported locales
......................................................................

engine,userportal,webadmin: configurable unsupported locales

- Added UnsupportedDisplayedLocales configuration variable to
  control which unsupported locales are displayed. Any locales
  in this list which are also in the UnsupportedLocaleFilter list
  will still be displayed.
- Added UnsupportedLocalesFilter configuration variable to control
  which locales are unsupported. Any locale in this list will NOT
  be displayed unless they are also in the UnsupportedDisplayedLocales
  list.

Change-Id: Ib1c882933a365b5f03769ae8e7048aaf3553633a
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1096525
Signed-off-by: Alexander Wels <aw...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
A 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelper.java
A 
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelperTest.java
M backend/manager/modules/welcome/pom.xml
M 
backend/manager/modules/welcome/src/main/java/org/ovirt/engine/core/WelcomeServlet.java
M 
backend/manager/modules/welcome/src/test/java/org/ovirt/engine/core/WelcomeServletTest.java
M frontend/webadmin/modules/frontend/pom.xml
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
M 
frontend/webadmin/modules/frontend/src/main/resources/META-INF/resources/GwtHostPage.jsp
M 
frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
M 
frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/UserPortalHostPageServletTest.java
M 
frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/VisibleLocalesInfoData.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractLoginFormView.java
M packaging/etc/engine-config/engine-config.properties
15 files changed, 323 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/53/30553/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index 6b48897..57451bf 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1861,5 +1861,16 @@
     @DefaultValueAttribute("false")
     CSRFProtection,
 
+    @Reloadable
+    @TypeConverterAttribute(List.class)
+    @DefaultValueAttribute("")
+    @OptionBehaviourAttribute(behaviour = 
OptionBehaviour.CommaSeparatedStringArray)
+    UnsupportedLocalesFilterOverrides,
+
+    @TypeConverterAttribute(List.class)
+    @DefaultValueAttribute("")
+    @OptionBehaviourAttribute(behaviour = 
OptionBehaviour.CommaSeparatedStringArray)
+    UnsupportedLocalesFilter,
+
     Invalid
 }
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelper.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelper.java
new file mode 100644
index 0000000..4c87992
--- /dev/null
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelper.java
@@ -0,0 +1,67 @@
+package org.ovirt.engine.core.utils.servlet;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
+
+public class UnsupportedLocaleHelper {
+    private static final Logger log = 
Logger.getLogger(UnsupportedLocaleHelper.class);
+
+    /**
+    * Determine the list of locales to display by subtracting unsupported 
locales from the list of all locales,
+    * but then adding back in locales we want to display anyway (locale 
overrides).
+    *
+    * Elements in the lists should be of format xx_YY, which is the standard 
Java Locale format.
+    * @param allLocales List of all available locales. Cannot be null.
+    * @param unsupportedLocalesFilterOverrides The list of unsupported locale 
overrides
+    * (display them even though they're unsupported). Cannot be null
+    * @param unsupportedLocalesFilter The list of unsupported locales. Cannot 
be null
+    * @return The {@code List} of locales to display
+    */
+    public static List<String> getDisplayedLocales(List<String> allLocales,
+            List<String> unsupportedLocalesFilterOverrides,
+            List<String> unsupportedLocalesFilter) {
+        List<String> result = new ArrayList<String>(allLocales);
+        //Override unsupported locales that we do want to display.
+        List<String> unsupportedLocalesTemp = new 
ArrayList<String>(unsupportedLocalesFilter);
+        unsupportedLocalesTemp.removeAll(unsupportedLocalesFilterOverrides);
+        //Remove remaining unsupported locales from the result.
+        result.removeAll(unsupportedLocalesTemp);
+        Collections.sort(result);
+        return result;
+    }
+
+    /**
+     * Get the locale keys from the configuration based on the {@code 
ConfigValues} passed in. Has to be either
+     * ConfigValues.UnsupportedLocalesFilter or 
ConfigValues.UnsupportedLocalesFilterOverrides. Will throw an
+     * {@code IllegalArgumentException} otherwise.
+     * @param configValues The key to use to look up the values.
+     * @return The value as a {@code List} of {@code Strings}.
+     */
+    public static List<String> getLocalesKeys(ConfigValues configValues) {
+        if (!configValues.equals(ConfigValues.UnsupportedLocalesFilter)
+                && 
!configValues.equals(ConfigValues.UnsupportedLocalesFilterOverrides)) {
+            throw new IllegalArgumentException("Passed in config value not 
related to locales"); //$NON-NLS-1$
+        }
+        List<String> locales = Config.<List<String>> getValue(configValues);
+        List<String> result = new ArrayList<String>();
+        if (locales != null && !locales.isEmpty()) {
+            for (String localeKey: locales) {
+                try {
+                    //Check for valid locale.
+                    String underScoredLocaleKey = localeKey.replaceAll("-", 
"_");
+                    
org.apache.commons.lang.LocaleUtils.toLocale(underScoredLocaleKey);
+                    result.add(underScoredLocaleKey);
+                } catch (IllegalArgumentException iae) {
+                    //The locale passed in is not valid, don't add it to the 
list.
+                    log.info("Invalid locale found in configuration: " + 
localeKey); //$NON-NLS-1$
+                }
+            }
+        }
+        return result;
+    }
+}
diff --git 
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelperTest.java
 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelperTest.java
new file mode 100644
index 0000000..25fccf0
--- /dev/null
+++ 
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/servlet/UnsupportedLocaleHelperTest.java
@@ -0,0 +1,117 @@
+package org.ovirt.engine.core.utils.servlet;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.utils.MockConfigRule;
+
+@RunWith(MockitoJUnitRunner.class)
+public class UnsupportedLocaleHelperTest {
+    static final List<String> unvalidatedUnsupportedLocales = new 
ArrayList<String>();
+
+    @ClassRule
+    public static MockConfigRule mcr =
+    new 
MockConfigRule(mockConfig(ConfigValues.UnsupportedLocalesFilterOverrides, 
unvalidatedUnsupportedLocales));
+
+    List<String> allLocales;
+
+    @Before
+    public void setUp() throws Exception {
+        allLocales = getAllLocales();
+        unvalidatedUnsupportedLocales.clear();
+    }
+
+    @Test
+    public void testGetDisplayLocales() {
+        List<String> displayLocales = new ArrayList<String>();
+        List<String> locales = 
UnsupportedLocaleHelper.getDisplayedLocales(allLocales, displayLocales,
+                new ArrayList<String>());
+        assertNotNull("Result should not be null", locales);
+        assertEquals("There should be 8 locales", 8, locales.size());
+    }
+
+    @Test
+    public void testGetDisplayLocalesUnsupported() {
+        List<String> displayLocales = new ArrayList<String>();
+        List<String> unSupportedLocales = new ArrayList<String>();
+        unSupportedLocales.add("pt_BR");
+        List<String> locales = 
UnsupportedLocaleHelper.getDisplayedLocales(allLocales, displayLocales, 
unSupportedLocales);
+        assertNotNull("Result should not be null", locales);
+        assertEquals("There should be 7 locales", 7, locales.size());
+        assertFalse("Locales should not contain 'pt_BR'", 
locales.contains("pt_BR"));
+    }
+
+    @Test
+    public void testGetDisplayLocalesWithUnsupportedHiding2() {
+        List<String> unSupportedLocales = new ArrayList<String>();
+        unSupportedLocales.add("de_DE");
+        List<String> locales = 
UnsupportedLocaleHelper.getDisplayedLocales(allLocales, new 
ArrayList<String>(), unSupportedLocales);
+        assertNotNull("Result should not be null", locales);
+        assertEquals("There should be 7 locales", 7, locales.size());
+        assertFalse("Locales should not contain 'de_DE'", 
locales.contains("de_DE"));
+    }
+
+    @Test
+    public void testGetDisplayLocalesWithUnsupportedShowing() {
+        List<String> unSupportedLocales = new ArrayList<String>();
+        unSupportedLocales.add("de_DE");
+        List<String> displayUnsupported = new ArrayList<String>();
+        displayUnsupported.add("de_DE");
+        List<String> locales = 
UnsupportedLocaleHelper.getDisplayedLocales(allLocales, displayUnsupported,
+                unSupportedLocales);
+        assertNotNull("Result should not be null", locales);
+        assertEquals("There should be 8 locales", 8, locales.size());
+        assertTrue("Locales should contain 'de_DE'", 
locales.contains("de_DE"));
+    }
+
+    @Test
+    public void testGetLocalesKeysUnSupported() {
+        unvalidatedUnsupportedLocales.add("ko_KR");
+        List<String> locales = 
UnsupportedLocaleHelper.getLocalesKeys(ConfigValues.UnsupportedLocalesFilterOverrides);
+        assertNotNull("Result should not be null", locales);
+        assertEquals("There should be 1 locales", 1, locales.size());
+        assertEquals("Locale should be ko_KR", "ko_KR", locales.get(0));
+    }
+
+    @Test
+    public void testGetLocalesKeysWithInvalid() {
+        unvalidatedUnsupportedLocales.add("ko_KR");
+        unvalidatedUnsupportedLocales.add("abcdds");
+        List<String> locales = 
UnsupportedLocaleHelper.getLocalesKeys(ConfigValues.UnsupportedLocalesFilterOverrides);
+        assertNotNull("Result should not be null", locales);
+        assertEquals("There should be 1 locales", 1, locales.size());
+        assertEquals("Locale should be ko_KR", "ko_KR", locales.get(0));
+    }
+
+    @Test
+    public void testGetLocalesKeysDisplayLocalesEmpty() {
+        List<String> locales = 
UnsupportedLocaleHelper.getLocalesKeys(ConfigValues.UnsupportedLocalesFilterOverrides);
+        assertNotNull("Result should not be null", locales);
+        assertEquals("There should be 0 locales", 0, locales.size());
+    }
+
+    private List<String> getAllLocales() {
+        List<String> result = new ArrayList<String>();
+        result.add("de_DE");
+        result.add("en_US");
+        result.add("fr_FR");
+        result.add("es_ES");
+        result.add("ja_JP");
+        result.add("ko_KR");
+        result.add("pt_BR");
+        result.add("zh_CN");
+        return result;
+    }
+}
diff --git a/backend/manager/modules/welcome/pom.xml 
b/backend/manager/modules/welcome/pom.xml
index d7cd66a..8973b1c 100644
--- a/backend/manager/modules/welcome/pom.xml
+++ b/backend/manager/modules/welcome/pom.xml
@@ -47,6 +47,14 @@
     </dependency>
 
     <dependency>
+      <groupId>${engine.groupId}</groupId>
+      <artifactId>utils</artifactId>
+      <version>${engine.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       <scope>provided</scope>
diff --git 
a/backend/manager/modules/welcome/src/main/java/org/ovirt/engine/core/WelcomeServlet.java
 
b/backend/manager/modules/welcome/src/main/java/org/ovirt/engine/core/WelcomeServlet.java
index 3ae65b1..36a7852 100644
--- 
a/backend/manager/modules/welcome/src/main/java/org/ovirt/engine/core/WelcomeServlet.java
+++ 
b/backend/manager/modules/welcome/src/main/java/org/ovirt/engine/core/WelcomeServlet.java
@@ -12,11 +12,13 @@
 
 import org.ovirt.engine.core.branding.BrandingManager;
 import org.ovirt.engine.core.common.config.ConfigCommon;
+import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.interfaces.BackendLocal;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.common.queries.GetConfigurationValueParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.utils.servlet.LocaleFilter;
+import org.ovirt.engine.core.utils.servlet.UnsupportedLocaleHelper;
 
 /**
  * This Servlet serves the welcome page to allow users to select either web 
admin or user portal.
@@ -78,7 +80,9 @@
     @Override
     protected void doGet(final HttpServletRequest request, final 
HttpServletResponse response) throws IOException,
         ServletException {
-        request.setAttribute(LOCALE_KEYS, LocaleFilter.getLocaleKeys());
+        request.setAttribute(LOCALE_KEYS, 
UnsupportedLocaleHelper.getDisplayedLocales(LocaleFilter.getLocaleKeys(),
+                
UnsupportedLocaleHelper.getLocalesKeys(ConfigValues.UnsupportedLocalesFilterOverrides),
+                        
UnsupportedLocaleHelper.getLocalesKeys(ConfigValues.UnsupportedLocalesFilter)));
         String oVirtVersion = 
backend.runPublicQuery(VdcQueryType.GetConfigurationValue,
                 new 
GetConfigurationValueParameters(ConfigurationValues.ProductRPMVersion,
                         
ConfigCommon.defaultConfigurationVersion)).getReturnValue();
@@ -91,4 +95,5 @@
             dispatcher.include(request, response);
         }
     }
+
 }
diff --git 
a/backend/manager/modules/welcome/src/test/java/org/ovirt/engine/core/WelcomeServletTest.java
 
b/backend/manager/modules/welcome/src/test/java/org/ovirt/engine/core/WelcomeServletTest.java
index e8511d5..5e6de3b 100644
--- 
a/backend/manager/modules/welcome/src/test/java/org/ovirt/engine/core/WelcomeServletTest.java
+++ 
b/backend/manager/modules/welcome/src/test/java/org/ovirt/engine/core/WelcomeServletTest.java
@@ -5,6 +5,7 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -17,20 +18,27 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.ovirt.engine.core.branding.BrandingManager;
 import org.ovirt.engine.core.branding.BrandingTheme;
+import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.interfaces.BackendLocal;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.servlet.LocaleFilter;
 
 @RunWith(MockitoJUnitRunner.class)
 public class WelcomeServletTest {
+    @ClassRule
+    public static MockConfigRule mcr =
+    new 
MockConfigRule(mockConfig(ConfigValues.UnsupportedLocalesFilterOverrides, new 
ArrayList<String>()));
+
     WelcomeServlet testServlet;
 
     @Mock
diff --git a/frontend/webadmin/modules/frontend/pom.xml 
b/frontend/webadmin/modules/frontend/pom.xml
index aa8d59c..9e143b7 100644
--- a/frontend/webadmin/modules/frontend/pom.xml
+++ b/frontend/webadmin/modules/frontend/pom.xml
@@ -86,6 +86,13 @@
       <version>${engine.version}</version>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>${engine.core.groupId}</groupId>
+      <artifactId>utils</artifactId>
+      <version>${engine.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <resources>
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
index 783909e..dd55363 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/server/gwt/GwtDynamicHostPageServlet.java
@@ -14,6 +14,7 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
 
+import org.apache.commons.lang.StringUtils;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.node.ArrayNode;
 import org.codehaus.jackson.node.ObjectNode;
@@ -21,12 +22,14 @@
 import org.ovirt.engine.core.branding.BrandingManager;
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.constants.SessionConstants;
+import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.interfaces.BackendLocal;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.utils.servlet.LocaleFilter;
 import org.ovirt.engine.core.utils.servlet.ServletUtils;
+import org.ovirt.engine.core.utils.servlet.UnsupportedLocaleHelper;
 
 /**
  * Renders the HTML host page of a GWT application.
@@ -48,7 +51,8 @@
         ATTR_BASE_CONTEXT_PATH("baseContextPath"), //$NON-NLS-1$
         ATTR_LOCALE(LocaleFilter.LOCALE),
         ATTR_SSO_TOKEN("ssoToken"), //$NON-NLS-1$
-        ATTR_APPLICATION_TYPE(BrandingFilter.APPLICATION_NAME);
+        ATTR_APPLICATION_TYPE(BrandingFilter.APPLICATION_NAME),
+        ATTR_DISPLAY_LOCALES("visibleLocales"); //$NON-NLS-1$
 
         private final String attributeKey;
 
@@ -110,6 +114,11 @@
                 getBrandingMessages(getApplicationTypeFromRequest(request), 
getLocaleFromRequest(request)));
         request.setAttribute(MD5Attributes.ATTR_BASE_CONTEXT_PATH.getKey(),
                 getValueObject(ServletUtils.getBaseContextPath(request)));
+        request.setAttribute(MD5Attributes.ATTR_DISPLAY_LOCALES.getKey(), 
getValueObject(
+                
StringUtils.join(UnsupportedLocaleHelper.getDisplayedLocales(LocaleFilter.getLocaleKeys(),
+                        
UnsupportedLocaleHelper.getLocalesKeys(ConfigValues.UnsupportedLocalesFilterOverrides),
+                        
UnsupportedLocaleHelper.getLocalesKeys(ConfigValues.UnsupportedLocalesFilter)),
+                        ","))); //$NON-NLS-1$
         // Set attribute for userInfo object
         DbUser loggedInUser =
                 getLoggedInUser(getEngineSessionId(request));
diff --git 
a/frontend/webadmin/modules/frontend/src/main/resources/META-INF/resources/GwtHostPage.jsp
 
b/frontend/webadmin/modules/frontend/src/main/resources/META-INF/resources/GwtHostPage.jsp
index 855dd87..f3728c3 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/resources/META-INF/resources/GwtHostPage.jsp
+++ 
b/frontend/webadmin/modules/frontend/src/main/resources/META-INF/resources/GwtHostPage.jsp
@@ -26,6 +26,9 @@
         <c:if test="${requestScope['messages'] != null}">
             var messages = <c:out value="${requestScope['messages']}" 
escapeXml="false"/>;
         </c:if>
+        <c:if test="${requestScope['visibleLocales'] != null}">
+            var visibleLocales = <c:out 
value="${requestScope['visibleLocales']}" escapeXml="false"/>;
+        </c:if>
         <c:if test="${requestScope['baseContextPath'] != null}">
             var baseContextPath = <c:out 
value="${requestScope['baseContextPath']}" escapeXml="false"/>;
         </c:if>
diff --git 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
index d72504c..003ea43 100644
--- 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
+++ 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/AbstractGwtDynamicHostPageServletTest.java
@@ -186,6 +186,11 @@
     public void testRunPublicQuery_GetConfigurationValue() {
         String sessionId = "sessionId"; //$NON-NLS-1$
         VdcQueryType queryType = VdcQueryType.GetConfigurationValue;
+        VdcQueryReturnValue returnIntValue = new VdcQueryReturnValue();
+        returnIntValue.setSucceeded(true);
+        returnIntValue.setReturnValue(Integer.valueOf(255));
+        when(mockBackend.runPublicQuery(eq(VdcQueryType.GetConfigurationValue),
+                eq(mockConfigQueryParams))).thenReturn(returnIntValue);
         Object result = testServlet.runPublicQuery(queryType, 
mockConfigQueryParams, sessionId);
         assertThat(result, is(instanceOf(Integer.class)));
         verify(mockConfigQueryParams).setSessionId(sessionId);
diff --git 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/UserPortalHostPageServletTest.java
 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/UserPortalHostPageServletTest.java
index fb42194..2132741 100644
--- 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/UserPortalHostPageServletTest.java
+++ 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/UserPortalHostPageServletTest.java
@@ -3,13 +3,23 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.spy;
+import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
 
+import java.util.ArrayList;
+
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.utils.MockConfigRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class UserPortalHostPageServletTest extends 
AbstractGwtDynamicHostPageServletTest<UserPortalHostPageServlet> {
+    @ClassRule
+    public static MockConfigRule mcr =
+    new 
MockConfigRule(mockConfig(ConfigValues.UnsupportedLocalesFilterOverrides, new 
ArrayList<String>()));
+
 
     @Override
     protected UserPortalHostPageServlet getTestServletSpy() {
diff --git 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
index 4455abd..5227e14 100644
--- 
a/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
+++ 
b/frontend/webadmin/modules/frontend/src/test/java/org/ovirt/engine/ui/frontend/server/gwt/WebAdminHostPageServletTest.java
@@ -12,6 +12,7 @@
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
 
 import java.io.IOException;
 import java.security.MessageDigest;
@@ -26,10 +27,13 @@
 import org.codehaus.jackson.node.ArrayNode;
 import org.codehaus.jackson.node.ObjectNode;
 import org.junit.Before;
+import org.junit.ClassRule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.ui.frontend.server.gwt.plugin.PluginData;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -37,6 +41,10 @@
 
     private static final String APPLICATION_MODE = "{ \"value\": \"123\" }"; 
//$NON-NLS-1$
 
+    @ClassRule
+    public static MockConfigRule mcr =
+    new 
MockConfigRule(mockConfig(ConfigValues.UnsupportedLocalesFilterOverrides, new 
ArrayList<String>()));
+
     @Mock
     private ObjectNode mockApplicationModeObject;
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/VisibleLocalesInfoData.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/VisibleLocalesInfoData.java
new file mode 100644
index 0000000..561d722
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/utils/VisibleLocalesInfoData.java
@@ -0,0 +1,55 @@
+package org.ovirt.engine.ui.common.utils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.gwt.core.client.JavaScriptObject;
+
+public final class VisibleLocalesInfoData extends JavaScriptObject {
+
+    protected VisibleLocalesInfoData() {
+    }
+
+    public static native VisibleLocalesInfoData instance() /*-{
+        return $wnd.visibleLocales;
+    }-*/;
+
+    private native String getValueString() /*-{
+        return this.value;
+    }-*/;
+
+    public List<String> getVisibleList() {
+        return getLocaleValues(getValueString());
+    }
+
+    private List<String> getLocaleValues(String localeString) {
+        List<String> result = new ArrayList<String>();
+        if (localeString != null && !localeString.isEmpty()) {
+            String[] locales = localeString.trim().split(" *, *"); 
//$NON-NLS-1$
+            for (String localeKey: locales) {
+                result.add(localeKey.replaceAll("-", "_")); //$NON-NLS-1$ 
$NON-NLS-2$
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Determine the list of locales to display by comparing the list of 
visible locales with the list of all locales.
+     * Any locale not in the visible list will be removed from the list of all 
locales.
+     *
+     * Elements in the lists should be of format xx_YY, which is the standard 
Java Locale format.
+     * @param allLocaleNames List of all available locales. Cannot be null.
+     * @param visibleLocales The list of visible locales. Cannot be null
+     * @return An array of locales that has been filtered.
+     */
+    public static String[] getFilteredLocaleNames(List<String> allLocaleNames,
+            List<String> visibleLocales) {
+        List<String> result = new ArrayList<String>(allLocaleNames);
+        List<String> hiddenList = new ArrayList<String>(allLocaleNames);
+        hiddenList.removeAll(visibleLocales);
+        result.removeAll(hiddenList);
+        Collections.sort(result);
+        return result.toArray(new String[result.size()]);
+    }
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractLoginFormView.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractLoginFormView.java
index 607f0d8..5020221 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractLoginFormView.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/AbstractLoginFormView.java
@@ -1,10 +1,13 @@
 package org.ovirt.engine.ui.common.view;
 
+import java.util.Arrays;
+
 import org.gwtbootstrap3.client.ui.Label;
 import org.gwtbootstrap3.client.ui.ListBox;
 import org.gwtbootstrap3.client.ui.Well;
 import org.ovirt.engine.ui.common.CommonApplicationResources;
 import org.ovirt.engine.ui.common.idhandler.WithElementId;
+import org.ovirt.engine.ui.common.utils.VisibleLocalesInfoData;
 import org.ovirt.engine.ui.common.widget.HasUiCommandClickHandlers;
 import org.ovirt.engine.ui.common.widget.PatternflyUiCommandButton;
 import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
@@ -113,6 +116,8 @@
         // Add the option to change the locale
         String currentLocale = LocaleInfo.getCurrentLocale().getLocaleName();
         String[] localeNames = LocaleInfo.getAvailableLocaleNames();
+        localeNames = 
VisibleLocalesInfoData.getFilteredLocaleNames(Arrays.asList(localeNames),
+                VisibleLocalesInfoData.instance().getVisibleList());
 
         // Populate the locale list box with available locales
         boolean foundDefaultLocale = false;
diff --git a/packaging/etc/engine-config/engine-config.properties 
b/packaging/etc/engine-config/engine-config.properties
index 892b66f..1fbc4f2 100644
--- a/packaging/etc/engine-config/engine-config.properties
+++ b/packaging/etc/engine-config/engine-config.properties
@@ -398,6 +398,7 @@
 PMHealthCheckEnabled.description="Enable/Disable Power Management Health Check 
feature."
 PMHealthCheckIntervalInSec.type=Integer
 PMHealthCheckIntervalInSec.description="The interval in which the Power 
Management Health Check is running."
+
 # Reports link
 RedirectServletReportsPage.description="Redirection target for Reports link"
 RedirectServletReportsPage.type=String
@@ -429,3 +430,5 @@
 ClusterRequiredRngSourcesDefault.type=StringMultiple
 ClusterRequiredRngSourcesDefault.validValues=random,hwrng
 
+UnsupportedLocalesFilterOverrides.description=A comma separated list of locale 
keys to display even though they're unsupported
+UnsupportedLocalesFilterOverrides.type=String


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib1c882933a365b5f03769ae8e7048aaf3553633a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <aw...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to