Skip to content

Commit

Permalink
FocusTypeUtil: added languageOrLocale, also used on GUI
Browse files Browse the repository at this point in the history
Exception-less version of toLocale moved to LocalizationUtil.
  • Loading branch information
virgo47 committed Aug 25, 2022
1 parent 8b72973 commit 6941dca
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5139,16 +5139,8 @@ public static <F extends FocusType> Locale getLocale() {
if (focus == null) {
return MidPointApplication.getDefaultLocale();
}
String prefLang = focus.getPreferredLanguage();
if (StringUtils.isBlank(prefLang)) {
prefLang = focus.getLocale();
}

try {
locale = LocaleUtils.toLocale(prefLang);
} catch (Exception ex) {
LOGGER.debug("Error occurred while getting user locale, " + ex.getMessage());
}
locale = LocalizationUtil.toLocale(FocusTypeUtil.languageOrLocale(focus));
}

if (locale == null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,29 @@
/*
* Copyright (c) 2016-2019 Evolveum and contributors
* Copyright (C) 2016-2022 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.schema.util;

import static java.util.Collections.emptyList;

import java.util.List;
import java.util.stream.Collectors;

import javax.xml.namespace.QName;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.RelationRegistry;
import com.evolveum.midpoint.schema.SchemaService;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import static java.util.Collections.emptyList;

/**
* @author semancik
*
*/
public class FocusTypeUtil {

Expand Down Expand Up @@ -92,7 +91,7 @@ public static String dumpInducementConstraints(AssignmentType assignmentType) {
return "1";
}
StringBuilder sb = new StringBuilder();
for (OrderConstraintsType orderConstraint: assignmentType.getOrderConstraint()) {
for (OrderConstraintsType orderConstraint : assignmentType.getOrderConstraint()) {
if (orderConstraint.getRelation() != null) {
sb.append(orderConstraint.getRelation().getLocalPart());
} else {
Expand All @@ -117,7 +116,7 @@ public static boolean selectorMatches(AssignmentSelectorType assignmentSelector,
if (assignmentType.getTargetRef() == null) {
return false;
}
for (ObjectReferenceType selectorTargetRef: assignmentSelector.getTargetRef()) {
for (ObjectReferenceType selectorTargetRef : assignmentSelector.getTargetRef()) {
if (MiscSchemaUtil.referenceMatches(selectorTargetRef, assignmentType.getTargetRef(), prismContext)) {
return true;
}
Expand Down Expand Up @@ -153,7 +152,7 @@ public static <O extends ObjectType> boolean hasSubtype(PrismObject<O> object, S
.contains(subtype);
}

public static <O extends ObjectType> void setSubtype(PrismObject<O> object, List<String> subtypes) {
public static <O extends ObjectType> void setSubtype(PrismObject<O> object, List<String> subtypes) {

List<String> objSubtypes = object.asObjectable().getSubtype();
if (!objSubtypes.isEmpty()) {
Expand Down Expand Up @@ -199,4 +198,21 @@ private static void deleteCompatibleIdentity(@NotNull FocusType focus, @NotNull
i -> FocusIdentityTypeUtil.matches(i, identity));
}
}

/**
* Returns language or locale string from focus - in that order of precedence.
* Focus may be null - returns null if focus is null or both language and locale is null.
*/
@Nullable
public static String languageOrLocale(@Nullable FocusType focus) {
if (focus == null) {
return null;
}
// Language first, then locale - this is how it was originally in GUI.
String recipientLocale = focus.getPreferredLanguage();
if (recipientLocale == null) {
recipientLocale = focus.getLocale();
}
return recipientLocale;
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,33 @@
/*
* Copyright (c) 2010-2017 Evolveum and contributors
* Copyright (C) 2010-2022 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.schema.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.function.Function;

import org.apache.commons.lang3.LocaleUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.util.*;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LocalizableMessageArgumentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LocalizableMessageListType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LocalizableMessageType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SingleLocalizableMessageType;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

public class LocalizationUtil {

public static final Trace LOGGER = TraceManager.getTrace(LocalizationUtil.class);

public static LocalizableMessageType createLocalizableMessageType(LocalizableMessage message) {
return createLocalizableMessageType(message, null);
}
Expand All @@ -40,7 +47,9 @@ public static LocalizableMessageType createLocalizableMessageType(LocalizableMes
@NotNull
private static LocalizableMessageListType createLocalizableMessageType(@NotNull LocalizableMessageList messageList, Function<LocalizableMessage, String> resolveKeys) {
LocalizableMessageListType rv = new LocalizableMessageListType();
messageList.getMessages().forEach(message -> {if (rv.getMessage() != null) rv.getMessage().add(createLocalizableMessageType(message, resolveKeys));});
messageList.getMessages().forEach(message -> {
if (rv.getMessage() != null) {rv.getMessage().add(createLocalizableMessageType(message, resolveKeys));}
});
rv.setSeparator(createLocalizableMessageType(messageList.getSeparator(), resolveKeys));
rv.setPrefix(createLocalizableMessageType(messageList.getPrefix(), resolveKeys));
rv.setPostfix(createLocalizableMessageType(messageList.getPostfix(), resolveKeys));
Expand All @@ -56,7 +65,7 @@ private static SingleLocalizableMessageType createLocalizableMessageType(@NotNul
LocalizableMessageArgumentType messageArgument;
if (argument instanceof LocalizableMessage) {
messageArgument = new LocalizableMessageArgumentType()
.localizable(createLocalizableMessageType(((LocalizableMessage) argument), resolveKeys));
.localizable(createLocalizableMessageType(((LocalizableMessage) argument), resolveKeys));
} else {
messageArgument = new LocalizableMessageArgumentType().value(argument != null ? argument.toString() : null);
}
Expand Down Expand Up @@ -149,4 +158,31 @@ private static List<Object> convertLocalizableMessageArguments(List<LocalizableM
public static LocalizableMessageType getLocalizableMessageOrDefault(LocalizableMessageType localizableMessage, String defaultValue) {
return localizableMessage != null ? localizableMessage : new SingleLocalizableMessageType().fallbackMessage(defaultValue);
}

/**
* Returns locale object for provided string using {@link LocaleUtils#toLocale(String)}.
* If the input string is null, or the conversion fails, null is returned.
*/
public static Locale toLocale(String str) {
return toLocale(str, null);
}

/**
* Returns locale object for provided string using {@link LocaleUtils#toLocale(String)}.
* If the input string is null, or the conversion fails, provided defaultLocale is returned.
*/
public static Locale toLocale(String str, Locale defaultLocale) {
if (str == null) {
return defaultLocale;
}

try {
return LocaleUtils.toLocale(str);
} catch (Exception ex) {
LOGGER.debug("Error occurred while creating locale object for input '"
+ str + "': " + ex.getMessage());
}

return defaultLocale;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,28 @@
import java.util.concurrent.atomic.AtomicBoolean;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.authentication.*;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.schema.*;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.LocaleUtils;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.authentication.*;
import com.evolveum.midpoint.model.api.context.EvaluatedAssignment;
import com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget;
import com.evolveum.midpoint.model.api.util.DeputyUtils;
import com.evolveum.midpoint.model.impl.controller.CollectionProcessor;
import com.evolveum.midpoint.model.impl.lens.AssignmentCollector;
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.repo.common.ObjectResolver;
import com.evolveum.midpoint.repo.common.SystemObjectCache;
import com.evolveum.midpoint.schema.*;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.FocusTypeUtil;
import com.evolveum.midpoint.schema.util.LocalizationUtil;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.security.api.Authorization;
import com.evolveum.midpoint.security.api.AuthorizationTransformer;
Expand Down Expand Up @@ -206,16 +202,8 @@ private void setupFocusPhoto(GuiProfiledPrincipal principal, @NotNull CompiledGu

private void setupLocale(GuiProfiledPrincipal principal, @NotNull CompiledGuiProfile compiledGuiProfile) {
FocusType focus = principal.getFocus();
String prefLang = focus.getPreferredLanguage();
if (StringUtils.isBlank(prefLang)) {
prefLang = focus.getLocale();
}
Locale locale = null;
try {
locale = LocaleUtils.toLocale(prefLang);
} catch (Exception ex) {
LOGGER.debug("Error occurred while getting user locale, " + ex.getMessage());
}
String prefLang = FocusTypeUtil.languageOrLocale(focus);
Locale locale = LocalizationUtil.toLocale(prefLang);
compiledGuiProfile.setLocale(locale);
}

Expand Down Expand Up @@ -270,7 +258,6 @@ private void applyAdminGuiConfiguration(CompiledGuiProfile composite, AdminGuiCo
joinShadowDetails(composite.getObjectDetails(), shadowDetails);
}


Optional<GuiResourceDetailsPageType> detailForAllResources
= adminGuiConfiguration.getObjectDetails().getResourceDetailsPage().stream()
.filter(currentDetails -> currentDetails.getConnectorRef() == null)
Expand Down Expand Up @@ -383,7 +370,7 @@ private HomePageType getHomePageByFocusType(List<HomePageType> homePageList, QNa
return null;
}

private HomePageType mergeHomePage(HomePageType compositeHomePage, HomePageType homePage) {
private HomePageType mergeHomePage(HomePageType compositeHomePage, HomePageType homePage) {
if (homePage == null) {
return compositeHomePage;
}
Expand Down

0 comments on commit 6941dca

Please sign in to comment.