blob: 424c28adc89f2ea2420c36131284d763f248f8ed [file] [log] [blame]
package org.eclipse.openk.contactbasedata.service;
import lombok.extern.log4j.Log4j2;
import org.eclipse.openk.contactbasedata.model.TblInternalPerson;
import org.eclipse.openk.contactbasedata.repository.InternalPersonRepository;
import org.eclipse.openk.contactbasedata.service.util.LdapUserAttributesMapper;
import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
import static org.springframework.ldap.query.LdapQueryBuilder.query;
@Log4j2
@Service
public class LdapUserService {
@Autowired
LdapUserAttributesMapper ldapUserAttributesMapper;
@Autowired
private InternalPersonRepository internalPersonRepository;
@Autowired
private InternalPersonService internalPersonService;
@Autowired
private LdapTemplate ldapTemplate;
/**
* Retrieves all the persons in the ldap server, using {@link LdapUserAttributesMapper}
* @return list of persons
*/
public List<LdapUser> getAllLdapUsers() {
return ldapTemplate.search(query()
.where("objectclass").is("person"), ldapUserAttributesMapper);
}
public void synchronize() {
List<TblInternalPerson> internalPersonList = internalPersonRepository.findByUidNotNull();
Map<String, TblInternalPerson> uidToInternalPersonMap = internalPersonList.stream().collect(
Collectors.toMap(TblInternalPerson::getUid, Function.identity()));
List<LdapUser> allLdapUsers = getAllLdapUsers();
List<TblInternalPerson> internalPersonListSynchronized = new ArrayList<>();
for (LdapUser ldapUser : allLdapUsers) {
TblInternalPerson tblInternalPerson = uidToInternalPersonMap.get(ldapUser.getUid());
if (tblInternalPerson == null) continue;
boolean attributesChanged = mapLdapUserToInternaPerson(tblInternalPerson, ldapUser);
if (attributesChanged) {
internalPersonListSynchronized.add(tblInternalPerson);
}
}
internalPersonRepository.saveAll(internalPersonListSynchronized);
}
private boolean mapLdapUserToInternaPerson(TblInternalPerson tblInternalPerson, LdapUser ldapUser) {
boolean attributesChanged = false;
if (!Objects.equals(tblInternalPerson.getFirstName(), ldapUser.getFirstName())
|| !Objects.equals(tblInternalPerson.getLastName(), ldapUser.getLastName() )
|| !Objects.equals(tblInternalPerson.getTitle(), ldapUser.getTitle() )
|| !Objects.equals(tblInternalPerson.getDepartment(), ldapUser.getDepartment())) {
attributesChanged = true;
tblInternalPerson.setFirstName(ldapUser.getFirstName());
tblInternalPerson.setLastName(ldapUser.getLastName());
tblInternalPerson.setTitle(ldapUser.getTitle());
tblInternalPerson.setDepartment(ldapUser.getDepartment());
}
return attributesChanged;
}
}