package org.fenixedu.academic.domain.accessControl;
import org.fenixedu.academic.domain.Person;
import org.fenixedu.academic.domain.phd.PhdIndividualProgramProcess;
import org.fenixedu.academic.util.Bundle;
import org.fenixedu.bennu.core.annotation.GroupOperator;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.groups.GroupStrategy;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.joda.time.DateTime;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Created by Sérgio Silva (hello@fenixedu.org).
*/
@GroupOperator("activePhdProcessesGroup")
public class ActivePhdProcessesGroup extends GroupStrategy {
@Override
public String getPresentationName() {
return BundleUtil.getString(Bundle.GROUP, "label.name.ActivePhdProcessesGroup");
}
@Override
public Stream<User> getMembers() {
return Bennu.getInstance().getPhdProgramsSet().stream()
.flatMap(program -> program.getIndividualProgramProcessesSet().stream())
.filter(PhdIndividualProgramProcess::isProcessActive).map(PhdIndividualProgramProcess::getPerson).map
(Person::getUser);
}
@Override
public Stream<User> getMembers(DateTime when) {
return getMembers();
}
@Override
public boolean isMember(User user) {
if (user == null || user.getPerson() == null) {
return false;
}
return user.getPerson().getPhdIndividualProgramProcessesSet().stream()
.anyMatch(PhdIndividualProgramProcess::isProcessActive);
}
@Override
public boolean isMember(User user, DateTime when) {
return isMember(user);
}
}