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