in core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/TemplateUtils.java [162:312]
public void apply(final RealmMember realmMember, final AnyTO template) {
fill(realmMember, template);
MapContext jexlContext = new MapContext();
JexlUtils.addFieldsToContext(realmMember, jexlContext);
JexlUtils.addAttrsToContext(realmMember.getPlainAttrs(), jexlContext);
JexlUtils.addAttrsToContext(realmMember.getDerAttrs(), jexlContext);
switch (template) {
case AnyObjectTO anyObjectTO -> {
fillRelationships((GroupableRelatableTO) realmMember, anyObjectTO);
fillMemberships((GroupableRelatableTO) realmMember, anyObjectTO);
}
case UserTO userTO -> {
if (StringUtils.isNotBlank(userTO.getUsername())) {
String evaluated = JexlUtils.evaluateExpr(userTO.getUsername(), jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
switch (realmMember) {
case UserTO urm ->
urm.setUsername(evaluated);
case UserCR urm ->
urm.setUsername(evaluated);
default -> {
}
}
}
}
if (StringUtils.isNotBlank(userTO.getPassword())) {
String evaluated = JexlUtils.evaluateExpr(userTO.getPassword(), jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
switch (realmMember) {
case UserTO urm ->
urm.setPassword(evaluated);
case UserCR urm ->
urm.setPassword(evaluated);
default -> {
}
}
}
}
if (userTO.isMustChangePassword()) {
switch (realmMember) {
case UserTO urm ->
urm.setMustChangePassword(true);
case UserCR urm ->
urm.setMustChangePassword(true);
default -> {
}
}
}
fillRelationships((GroupableRelatableTO) realmMember, ((GroupableRelatableTO) template));
fillMemberships((GroupableRelatableTO) realmMember, ((GroupableRelatableTO) template));
userTO.getRoles().
forEach(role -> {
if (realmMember instanceof UserTO urm) {
urm.getRoles().add(role);
} else if (realmMember instanceof UserCR urm) {
urm.getRoles().add(role);
}
});
userTO.getLinkedAccounts().forEach(account -> {
if (realmMember instanceof UserTO urm && urm.getLinkedAccounts().stream().
noneMatch(a -> Objects.equals(account.getConnObjectKeyValue(), a.getConnObjectKeyValue())
&& Objects.equals(account.getResource(), a.getResource()))) {
urm.getLinkedAccounts().add(account);
} else if (realmMember instanceof UserCR urm && urm.getLinkedAccounts().stream().
noneMatch(a -> Objects.equals(account.getConnObjectKeyValue(), a.getConnObjectKeyValue())
&& Objects.equals(account.getResource(), a.getResource()))) {
urm.getLinkedAccounts().add(account);
}
});
}
case GroupTO groupTO -> {
if (StringUtils.isNotBlank(groupTO.getName())) {
String evaluated = JexlUtils.evaluateExpr(groupTO.getName(), jexlContext).toString();
if (StringUtils.isNotBlank(evaluated)) {
switch (realmMember) {
case GroupTO grm ->
grm.setName(evaluated);
case GroupCR grm ->
grm.setName(evaluated);
default -> {
}
}
}
}
Optional.ofNullable(groupTO.getUserOwner()).flatMap(userDAO::findById).ifPresent(userOwner -> {
switch (realmMember) {
case GroupTO grm ->
grm.setUserOwner(userOwner.getKey());
case GroupCR grm ->
grm.setUserOwner(userOwner.getKey());
default -> {
}
}
});
Optional.ofNullable(groupTO.getGroupOwner()).flatMap(groupDAO::findById).ifPresent(groupOwner -> {
switch (realmMember) {
case GroupTO grm ->
grm.setGroupOwner(groupOwner.getKey());
case GroupCR grm ->
grm.setGroupOwner(groupOwner.getKey());
default -> {
}
}
});
Optional.ofNullable(groupTO.getUDynMembershipCond()).ifPresent(udynMembershipCond -> {
switch (realmMember) {
case GroupTO grm ->
grm.setUDynMembershipCond(udynMembershipCond);
case GroupCR grm ->
grm.setUDynMembershipCond(udynMembershipCond);
default -> {
}
}
});
groupTO.getADynMembershipConds().forEach((anyType, cond) -> {
if (realmMember instanceof GroupTO grm && grm.getADynMembershipConds().containsKey(anyType)) {
grm.getADynMembershipConds().put(anyType, cond);
} else if (realmMember instanceof GroupCR grm
&& !grm.getADynMembershipConds().containsKey(anyType)) {
grm.getADynMembershipConds().put(anyType, cond);
}
});
groupTO.getTypeExtensions().forEach(typeExt -> {
if (realmMember instanceof GroupTO grm && !grm.getTypeExtensions().contains(typeExt)) {
grm.getTypeExtensions().add(typeExt);
} else if (realmMember instanceof GroupCR grm && !grm.getTypeExtensions().contains(typeExt)) {
grm.getTypeExtensions().add(typeExt);
}
});
}
default -> {
}
}
}