package org.fenixedu.bennu.core.example.domain.groups; import java.lang.reflect.UndeclaredThrowableException; import java.util.List; import java.util.Set; import java.util.stream.Stream; import org.fenixedu.bennu.core.annotation.GroupArgument; 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.domain.groups.PersistentGroup; import org.fenixedu.bennu.core.groups.CustomGroup; import org.fenixedu.bennu.core.groups.Group; import org.joda.time.DateTime; import pt.ist.fenixframework.FenixFramework; public class UsersCreatedAfterGroup extends UsersCreatedAfterGroup_Base { @GroupOperator("after") public static class UsersCreatedAfter extends CustomGroup { private static final long serialVersionUID = -5322710492297718102L; @GroupArgument("") private DateTime date; @GroupArgument private Boolean inclusive; @GroupArgument("things") private Set<String> stuff; @GroupArgument private List<String> x1; @GroupArgument private String[] x2; protected UsersCreatedAfter() { } public UsersCreatedAfter(DateTime date) { this.date = date; } @Override public String getPresentationName() { return "Users Created After " + date.toString(); } @Override public PersistentGroup toPersistentGroup() { return UsersCreatedAfterGroup.getInstance(date); } @Override public Stream<User> getMembers() { return Bennu.getInstance().getUserSet().stream().filter(user -> user.getCreated().isAfter(date)); } @Override public Stream<User> getMembers(DateTime when) { return getMembers(); } @Override public boolean isMember(User user) { return user != null && user.getCreated().isAfter(date); } @Override public boolean isMember(User user, DateTime when) { return isMember(user); } @Override public boolean equals(Object object) { if (object instanceof UsersCreatedAfter) { return date.equals(((UsersCreatedAfter) object).date); } return false; } @Override public int hashCode() { return date.hashCode(); } } protected UsersCreatedAfterGroup(DateTime date) { super(); setDate(date); } @Override public Group toGroup() { return new UsersCreatedAfter(getDate()); } public static PersistentGroup getInstance(DateTime date) { try { return FenixFramework.atomic(() -> new UsersCreatedAfterGroup(date)); } catch (Exception e) { throw new UndeclaredThrowableException(e); } } }