package org.synyx.urlaubsverwaltung.security;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.springframework.util.StringUtils;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Represents a LDAP user with relevant information.
*
* @author Aljona Murygina - murygina@synyx.de
*/
public final class LdapUser {
private final String username;
private String firstName;
private String lastName;
private String email;
private final Set<String> memberOf = new HashSet<>();
public LdapUser(String username, Optional<String> firstName, Optional<String> lastName, Optional<String> email,
String... memberOf) {
if (!StringUtils.hasText(username)) {
throw new IllegalArgumentException("Username must be given.");
}
this.username = username;
if (firstName.isPresent()) {
this.firstName = firstName.get();
}
if (lastName.isPresent()) {
this.lastName = lastName.get();
}
if (email.isPresent()) {
this.email = email.get();
}
Collections.addAll(this.memberOf, memberOf);
}
public String getUsername() {
return username;
}
public Optional<String> getFirstName() {
return Optional.ofNullable(firstName);
}
public Optional<String> getLastName() {
return Optional.ofNullable(lastName);
}
public Optional<String> getEmail() {
return Optional.ofNullable(email);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
public List<String> getMemberOf() {
return Collections.unmodifiableList(memberOf.stream().collect(Collectors.toList()));
}
}