package pt.ist.fenixedu.contracts.ui.spring;
import java.util.Collection;
import java.util.Collections;
import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.ui.struts.action.accounts.SearchParametersBean;
import org.fenixedu.bennu.core.domain.User;
import pt.ist.fenixedu.contracts.domain.Employee;
public class PersonnelSectionSearchBean extends SearchParametersBean {
private Integer employeeNumber;
public Integer getEmployeeNumber() {
return employeeNumber;
}
public void setEmployeeNumber(Integer employeeNumber) {
this.employeeNumber = employeeNumber;
}
@Override
public Collection<Person> search() {
Collection<Person> search = super.search();
Stream<User> stream = search.isEmpty() ? null : search.stream().map(p -> p.getUser());
Stream<User> matches = filterEmployeeNumber(stream);
return matches == null ? null : matches.map(u -> u.getPerson()).filter(Objects::nonNull)
.collect(Collectors.toSet());
}
private Stream<User> filterEmployeeNumber(Stream<User> matches) {
if (employeeNumber != null) {
if (matches == null) {
return Stream.of(Employee.readByNumber(employeeNumber)).filter(Objects::nonNull).map(Employee::getPerson)
.map(Person::getUser).filter(Objects::nonNull);
} else {
return matches.filter(p -> Stream.of(p.getPerson()).map(Person::getEmployee).filter(Objects::nonNull)
.filter(a -> a.getEmployeeNumber().equals(employeeNumber)).findAny().isPresent());
}
}
return matches;
}
}