return userMod;
}
private UserTO getUserTOFromConnObject(final ConnectorObject obj, final SyncTask syncTask) {
final UserTO userTO = new UserTO();
// 1. fill with data from connector object
for (SchemaMapping mapping : syncTask.getResource().getMappings()) {
Attribute attribute = obj.getAttributeByName(SchemaMappingUtil.getExtAttrName(mapping));
AttributeTO attributeTO;
switch (mapping.getIntMappingType()) {
case SyncopeUserId:
break;
case Password:
if (attribute != null && attribute.getValue() != null && !attribute.getValue().isEmpty()) {
userTO.setPassword(getPassword(attribute.getValue().get(0)));
}
break;
case Username:
userTO.setUsername(attribute == null || attribute.getValue().isEmpty()
? null
: attribute.getValue().get(0).toString());
break;
case UserSchema:
attributeTO = new AttributeTO();
attributeTO.setSchema(mapping.getIntAttrName());
for (Object value : attribute == null || attribute.getValue() == null
? Collections.EMPTY_LIST
: attribute.getValue()) {
attributeTO.addValue(value.toString());
}
userTO.addAttribute(attributeTO);
break;
case UserDerivedSchema:
attributeTO = new AttributeTO();
attributeTO.setSchema(mapping.getIntAttrName());
userTO.addDerivedAttribute(attributeTO);
break;
case UserVirtualSchema:
attributeTO = new AttributeTO();
attributeTO.setSchema(mapping.getIntAttrName());
for (Object value : attribute == null || attribute.getValue() == null
? Collections.EMPTY_LIST
: attribute.getValue()) {
attributeTO.addValue(value.toString());
}
userTO.addVirtualAttribute(attributeTO);
break;
default:
}
}
// 2. add data from defined template (if any)
UserTO template = syncTask.getUserTemplate();
if (template != null) {
if (StringUtils.isBlank(userTO.getUsername()) && StringUtils.isNotBlank(template.getUsername())) {
String evaluated = jexlUtil.evaluate(template.getUsername(), userTO);
if (StringUtils.isNotBlank(evaluated)) {
userTO.setUsername(template.getUsername());
}
}
if (StringUtils.isBlank(userTO.getPassword()) && StringUtils.isNotBlank(template.getPassword())) {
String evaluated = jexlUtil.evaluate(template.getPassword(), userTO);
if (StringUtils.isNotBlank(evaluated)) {
userTO.setPassword(template.getPassword());
}
}
fillFromTemplate(userTO, template);
for (String resource : template.getResources()) {
userTO.addResource(resource);
}
Map<Long, MembershipTO> currentMembs = userTO.getMembershipMap();
for (MembershipTO membTO : template.getMemberships()) {
MembershipTO membTBU;
if (currentMembs.containsKey(membTO.getRoleId())) {
membTBU = currentMembs.get(membTO.getRoleId());
} else {
membTBU = new MembershipTO();