}
public GroupMembership addUserToGroup(User user, UserGroup group) throws SimpleMessageException {
Transaction tx = null;
try {
User authUser = getAuthenticatedUser(session.get());
if (authUser == null) {
throw new SimpleMessageException("Could not join group, attempt to join with unauthorized client.");
}
group = (UserGroup) session.get().load(UserGroup.class, group.getId());
user = (User) session.get().load(User.class, user.getId());
if (group == null || user == null) {
throw new SimpleMessageException("Could not join group, user and group not found.");
}
// the group owner and an administrator may add users to groups without obeying the 'lock'
if (group.isLocked() && !authUser.isAdministrator() && !group.getOwner().getId().equals(authUser.getId())) {
throw new SimpleMessageException("This group is currently not accepting new members.");
}
if (authUser.isAdministrator() || group.isAutoJoin() || group.getOwner().getId().equals(authUser.getId())) {
tx = session.get().beginTransaction();
GroupMembership groupMembership = new GroupMembership();
groupMembership.setUser(user);
groupMembership.setUserGroup(group);
session.get().save(groupMembership);