package envoy.server.data; import java.util.stream.Collectors; import javax.persistence.*; /** * Represents a group inside the database. Referred to as "server group" as opposed to "group" from * Envoy Common. * * @author Maximilian Käfer * @since Envoy Server Standalone v0.1-alpha */ @Entity @NamedQueries({ @NamedQuery(name = Group.findByName, query = "SELECT g FROM Group g WHERE g.name = :name"), @NamedQuery(name = Group.findPendingGroups, query = "SELECT g FROM Group g WHERE g.creationDate > :lastSeen AND :user MEMBER OF g.contacts") }) public final class Group extends Contact { /** * Named query retrieving a group by name (parameter {@code :name}). * * @since Envoy Server Standalone v0.1-beta */ public static final String findByName = "Group.findByName"; /** * Named query retrieving all pending groups for a specific user (parameter {@code :user}, * {@code :lastSeen}). * * @since Envoy Server Standalone v0.1-beta */ public static final String findPendingGroups = "Group.findPendingGroups"; @Override public envoy.data.Group toCommon() { return new envoy.data.Group(id, name, contacts.parallelStream().map(User.class::cast) .map(User::toFlatCommon).collect(Collectors.toSet())); } @Override protected envoy.data.Group toFlatCommon() { return toCommon(); } }