This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 3e1619216e447ed8b3411f41f00bc7e670214959 Author: Francesco Chicchiriccò <ilgro...@apache.org> AuthorDate: Tue Feb 28 12:32:40 2023 +0100 [SYNCOPE-1736] Update template handling --- .../provisioning/java/utils/TemplateUtils.java | 96 ++++++++++++++++------ 1 file changed, 71 insertions(+), 25 deletions(-) diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java index 873287a73f..7d063de1f8 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java @@ -19,6 +19,7 @@ package org.apache.syncope.core.provisioning.java.utils; import java.util.Map; +import java.util.Objects; import java.util.Optional; import org.apache.commons.jexl3.MapContext; import org.apache.commons.lang3.StringUtils; @@ -37,8 +38,6 @@ import org.apache.syncope.common.lib.types.ClientExceptionType; import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.apache.syncope.core.persistence.api.entity.AnyTemplate; -import org.apache.syncope.core.persistence.api.entity.group.Group; -import org.apache.syncope.core.persistence.api.entity.user.User; import org.apache.syncope.core.provisioning.api.jexl.JexlUtils; import org.springframework.transaction.annotation.Transactional; @@ -179,11 +178,32 @@ public class TemplateUtils { fillRelationships((GroupableRelatableTO) realmMember, ((GroupableRelatableTO) template)); fillMemberships((GroupableRelatableTO) realmMember, ((GroupableRelatableTO) template)); - if (realmMember instanceof UserTO) { - ((UserTO) realmMember).getRoles().addAll(((UserTO) template).getRoles()); - } else if (realmMember instanceof UserCR) { - ((UserCR) realmMember).getRoles().addAll(((UserTO) template).getRoles()); - } + + ((UserTO) template).getRoles().forEach(role -> { + if (realmMember instanceof UserTO + && !((UserTO) realmMember).getRoles().contains(role)) { + + ((UserTO) realmMember).getRoles().add(role); + } else if (realmMember instanceof UserCR + && !((UserCR) realmMember).getRoles().contains(role)) { + + ((UserCR) realmMember).getRoles().add(role); + } + }); + + ((UserTO) template).getLinkedAccounts().forEach(account -> { + if (realmMember instanceof UserTO && ((UserTO) realmMember).getLinkedAccounts().stream(). + noneMatch(a -> Objects.equals(account.getConnObjectKeyValue(), a.getConnObjectKeyValue()) + && Objects.equals(account.getResource(), a.getResource()))) { + + ((UserTO) realmMember).getLinkedAccounts().add(account); + } else if (realmMember instanceof UserCR && ((UserCR) realmMember).getLinkedAccounts().stream(). + noneMatch(a -> Objects.equals(account.getConnObjectKeyValue(), a.getConnObjectKeyValue()) + && Objects.equals(account.getResource(), a.getResource()))) { + + ((UserCR) realmMember).getLinkedAccounts().add(account); + } + }); } else if (template instanceof GroupTO) { if (StringUtils.isNotBlank(((GroupTO) template).getName())) { String evaluated = JexlUtils.evaluate(((GroupTO) template).getName(), jexlContext).toString(); @@ -196,26 +216,52 @@ public class TemplateUtils { } } - if (((GroupTO) template).getUserOwner() != null) { - final User userOwner = userDAO.find(((GroupTO) template).getUserOwner()); - if (userOwner != null) { - if (realmMember instanceof GroupTO) { - ((GroupTO) realmMember).setUserOwner(userOwner.getKey()); - } else if (realmMember instanceof GroupCR) { - ((GroupCR) realmMember).setUserOwner(userOwner.getKey()); - } + Optional.ofNullable(((GroupTO) template).getUserOwner()).map(userDAO::find).ifPresent(userOwner -> { + if (realmMember instanceof GroupTO) { + ((GroupTO) realmMember).setUserOwner(userOwner.getKey()); + } else if (realmMember instanceof GroupCR) { + ((GroupCR) realmMember).setUserOwner(userOwner.getKey()); } - } - if (((GroupTO) template).getGroupOwner() != null) { - final Group groupOwner = groupDAO.find(((GroupTO) template).getGroupOwner()); - if (groupOwner != null) { - if (realmMember instanceof GroupTO) { - ((GroupTO) realmMember).setGroupOwner(groupOwner.getKey()); - } else if (realmMember instanceof GroupCR) { - ((GroupCR) realmMember).setGroupOwner(groupOwner.getKey()); - } + }); + Optional.ofNullable(((GroupTO) template).getGroupOwner()).map(groupDAO::find).ifPresent(groupOwner -> { + if (realmMember instanceof GroupTO) { + ((GroupTO) realmMember).setGroupOwner(groupOwner.getKey()); + } else if (realmMember instanceof GroupCR) { + ((GroupCR) realmMember).setGroupOwner(groupOwner.getKey()); } - } + }); + + Optional.ofNullable(((GroupTO) template).getUDynMembershipCond()).ifPresent(udynMembershipCond -> { + if (realmMember instanceof GroupTO) { + ((GroupTO) realmMember).setUDynMembershipCond(udynMembershipCond); + } else if (realmMember instanceof GroupCR) { + ((GroupCR) realmMember).setUDynMembershipCond(udynMembershipCond); + } + }); + + ((GroupTO) template).getADynMembershipConds().forEach((anyType, cond) -> { + if (realmMember instanceof GroupTO + && !((GroupTO) realmMember).getADynMembershipConds().containsKey(anyType)) { + + ((GroupTO) realmMember).getADynMembershipConds().put(anyType, cond); + } else if (realmMember instanceof GroupCR + && !((GroupCR) realmMember).getADynMembershipConds().containsKey(anyType)) { + + ((GroupCR) realmMember).getADynMembershipConds().put(anyType, cond); + } + }); + + ((GroupTO) template).getTypeExtensions().forEach(typeExt -> { + if (realmMember instanceof GroupTO + && !((GroupTO) realmMember).getTypeExtensions().contains(typeExt)) { + + ((GroupTO) realmMember).getTypeExtensions().add(typeExt); + } else if (realmMember instanceof GroupCR + && !((GroupCR) realmMember).getTypeExtensions().contains(typeExt)) { + + ((GroupCR) realmMember).getTypeExtensions().add(typeExt); + } + }); } }