in core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java [1011:1145]
public void setIntValues(final Item item, final Attribute attr, final AnyTO anyTO) {
List<Object> values = null;
if (attr != null) {
values = attr.getValue();
for (ItemTransformer transformer : MappingUtils.getItemTransformers(item, getTransformers(item))) {
values = transformer.beforePull(item, anyTO, values);
}
}
values = Optional.ofNullable(values).orElseGet(List::of);
IntAttrName intAttrName;
try {
intAttrName = intAttrNameParser.parse(item.getIntAttrName(), AnyTypeKind.fromTOClass(anyTO.getClass()));
} catch (ParseException e) {
LOG.error("Invalid intAttrName '{}' specified, ignoring", item.getIntAttrName(), e);
return;
}
if (intAttrName.getField() != null) {
switch (intAttrName.getField()) {
case "password" -> {
if (anyTO instanceof UserTO && !values.isEmpty()) {
((UserTO) anyTO).setPassword(ConnObjectUtils.getPassword(values.getFirst()));
}
}
case "username" -> {
if (anyTO instanceof UserTO userTO) {
userTO.setUsername(values.isEmpty() || values.getFirst() == null
? null
: values.getFirst().toString());
}
}
case "name" -> {
switch (anyTO) {
case GroupTO groupTO ->
groupTO.setName(values.isEmpty() || values.getFirst() == null
? null
: values.getFirst().toString());
case AnyObjectTO anyObjectTO ->
anyObjectTO.setName(values.isEmpty() || values.getFirst() == null
? null
: values.getFirst().toString());
default -> {
}
}
}
case "mustChangePassword" -> {
if (anyTO instanceof UserTO && !values.isEmpty() && values.getFirst() != null) {
((UserTO) anyTO).setMustChangePassword(BooleanUtils.toBoolean(values.getFirst().toString()));
}
}
case "userOwner", "groupOwner" -> {
if (anyTO instanceof final GroupTO groupTO && attr != null) {
// using a special attribute (with schema "", that will be ignored) for carrying the
// GroupOwnerSchema value
Attr attrTO = new Attr();
attrTO.setSchema(StringUtils.EMPTY);
if (values.isEmpty() || values.getFirst() == null) {
attrTO.getValues().add(StringUtils.EMPTY);
} else {
attrTO.getValues().add(values.getFirst().toString());
}
groupTO.getPlainAttrs().add(attrTO);
}
}
default -> {
}
}
} else if (intAttrName.getSchemaType() != null && attr != null) {
GroupableRelatableTO groupableTO;
Group group;
if (anyTO instanceof final GroupableRelatableTO groupableRelatableTO
&& intAttrName.getMembershipOfGroup() != null) {
groupableTO = groupableRelatableTO;
group = groupDAO.findByName(intAttrName.getMembershipOfGroup()).orElse(null);
} else {
groupableTO = null;
group = null;
}
switch (intAttrName.getSchemaType()) {
case PLAIN -> {
Attr attrTO = new Attr();
attrTO.setSchema(intAttrName.getSchema().getKey());
PlainSchema schema = (PlainSchema) intAttrName.getSchema();
for (Object value : values) {
AttrSchemaType schemaType = schema == null ? AttrSchemaType.String : schema.getType();
if (value != null) {
if (schemaType == AttrSchemaType.Binary) {
attrTO.getValues().add(Base64.getEncoder().encodeToString((byte[]) value));
} else {
attrTO.getValues().add(value.toString());
}
}
}
if (groupableTO == null || group == null) {
anyTO.getPlainAttrs().add(attrTO);
} else {
MembershipTO membership = groupableTO.getMembership(group.getKey()).orElseGet(() -> {
MembershipTO newMemb = new MembershipTO.Builder(group.getKey()).build();
groupableTO.getMemberships().add(newMemb);
return newMemb;
});
membership.getPlainAttrs().add(attrTO);
}
}
case DERIVED -> {
Attr attrTO = new Attr();
attrTO.setSchema(intAttrName.getSchema().getKey());
if (groupableTO == null || group == null) {
anyTO.getDerAttrs().add(attrTO);
} else {
MembershipTO membership = groupableTO.getMembership(group.getKey()).orElseGet(() -> {
MembershipTO newMemb = new MembershipTO.Builder(group.getKey()).build();
groupableTO.getMemberships().add(newMemb);
return newMemb;
});
membership.getDerAttrs().add(attrTO);
}
}
default -> {
}
}
}
}