diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java index 90a0de743..2b2e8595a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/UiProperties.java @@ -11,6 +11,7 @@ package org.eclipse.hawkbit.ui; import java.io.Serializable; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.concurrent.TimeUnit; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -53,7 +54,6 @@ public class UiProperties implements Serializable { this.fixedTimeZone = fixedTimeZone; } - /** * Localization information */ @@ -63,26 +63,26 @@ public class UiProperties implements Serializable { /** * Default localization */ - private String defaultLocal = "en"; + private Locale defaultLocal = Locale.ENGLISH; /** * List of available localizations */ - private List availableLocals = Collections.singletonList("en"); + private List availableLocals = Collections.singletonList(Locale.ENGLISH); - public String getDefaultLocal() { + public Locale getDefaultLocal() { return defaultLocal; } - public List getAvailableLocals() { + public List getAvailableLocals() { return availableLocals; } - public void setDefaultLocal(final String defaultLocal) { + public void setDefaultLocal(final Locale defaultLocal) { this.defaultLocal = defaultLocal; } - public void setAvailableLocals(final List availableLocals) { + public void setAvailableLocals(final List availableLocals) { this.availableLocals = availableLocals; } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java index 4ca57d2fb..93d1395af 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java @@ -8,7 +8,8 @@ */ package org.eclipse.hawkbit.ui.rollout; -import java.util.Locale; +import static org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil.getCurrentLocale; + import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; @@ -154,9 +155,7 @@ public final class DistributionBarHelper { final double minTotalSize = MINIMUM_PART_SIZE * noOfParts; final double availableSize = PARENT_SIZE_IN_PCT - minTotalSize; final double val = MINIMUM_PART_SIZE + (double) value / totalValue * availableSize; - // necessary due the format must contain a dot and other locals might - // use a comma - return String.format(Locale.ENGLISH, "%.3f", val) + "%"; + return String.format(getCurrentLocale(), "%.3f", val) + "%"; } private static String getPart(final int partIndex, final Status status, final Long value, final Long totalValue, diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index c24a49558..3598c02e1 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -478,7 +478,7 @@ public final class HawkbitCommonUtil { default: break; } - return String.format("%.1f", tmpFinishedPercentage); + return String.format(getCurrentLocale(), "%.1f", tmpFinishedPercentage); } /** @@ -574,14 +574,14 @@ public final class HawkbitCommonUtil { */ public static Locale getLocaleToBeUsed(final UiProperties.Localization localizationProperties, final Locale desiredLocale) { - final List availableLocals = localizationProperties.getAvailableLocals(); + final List availableLocals = localizationProperties.getAvailableLocals(); // ckeck if language code of UI locale matches an available local. // Country, region and variant are ignored. "availableLocals" must only // contain language codes without country or other extensions. - if (availableLocals.contains(desiredLocale.getLanguage())) { + if (availableLocals.contains(desiredLocale)) { return desiredLocale; } - return new Locale(localizationProperties.getDefaultLocal()); + return localizationProperties.getDefaultLocal(); } /** diff --git a/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtilTest.java b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtilTest.java new file mode 100644 index 000000000..ecec9257a --- /dev/null +++ b/hawkbit-ui/src/test/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtilTest.java @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2019 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.utils; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.doReturn; + +import java.util.Arrays; +import java.util.Locale; + +import org.eclipse.hawkbit.ui.UiProperties; +import org.junit.Test; +import org.mockito.Mockito; + +import com.vaadin.ui.UI; + +import io.qameta.allure.Description; +import io.qameta.allure.Feature; +import io.qameta.allure.Story; + +@Feature("Unit Tests - Localization helper") +@Story("Test the locale configuration and prioritization") +public class HawkbitCommonUtilTest { + + @Test + @Description("getCurrentLocale should return the set Locale in the UI if found, otherwise the default System Locale") + public void getCurrentLocaleShouldReturnSetUILocaleOrDefaultSystemLocale() { + final UI ui = Mockito.mock(UI.class); + + // GIVEN + UI.setCurrent(null); + // WHEN + final Locale currentLocale = HawkbitCommonUtil.getCurrentLocale(); + // THEN + assertEquals(Locale.getDefault(), currentLocale); + + // GIVEN + UI.setCurrent(ui); + doReturn(Locale.GERMAN).when(ui).getLocale(); + // WHEN + final Locale currentLocale2 = HawkbitCommonUtil.getCurrentLocale(); + // THEN + assertEquals(Locale.GERMAN, currentLocale2); + } + + @Test + @Description("If a default locale is set in the environment, then it should take perceedence over requested browser locale") + public void getLocaleToBeUsedShouldReturnDefaultLocalIfSet() { + final UiProperties.Localization localizationProperties = Mockito.mock(UiProperties.Localization.class); + + // GIVEN + doReturn(Locale.GERMAN).when(localizationProperties).getDefaultLocal(); + // WHEN + final Locale localeToBeUsed = HawkbitCommonUtil.getLocaleToBeUsed(localizationProperties, Locale.CHINESE); + // THEN + assertEquals(Locale.GERMAN, localeToBeUsed); + } + + @Test + @Description("If no default locale is set in the environment, then the requested browser locale may be used if supported") + public void getLocaleToBeUsedShouldReturnRequestedLocalIfSupportedAndNoDefaultIsSet() { + final UiProperties.Localization localizationProperties = Mockito.mock(UiProperties.Localization.class); + + // GIVEN + doReturn(null).when(localizationProperties).getDefaultLocal(); + doReturn(Arrays.asList(Locale.ENGLISH, Locale.GERMAN)).when(localizationProperties).getAvailableLocals(); + + // WHEN + final Locale localeToBeUsed = HawkbitCommonUtil.getLocaleToBeUsed(localizationProperties, Locale.GERMAN); + // THEN + assertEquals(Locale.GERMAN, localeToBeUsed); + } + +}