Core : Ajout du systeme d'invitation.

Creation de l'entite InvitationToken et implementation des methodes d'acces dans les Managers.
Prise en compte des invitations lors de l'ajout d'utilisateur
This commit is contained in:
2008-01-31 21:03:52 +00:00
parent af7b73ac03
commit c297d94e0a
9 changed files with 257 additions and 10 deletions

View File

@@ -66,7 +66,7 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
public List<Article> getArticles(Integer confId) throws ConferenceDoesntExistException {
Conference conf = em.find(Conference.class, confId);
if(conf == null){
throw new ConferenceDoesntExistException();
throw new ConferenceDoesntExistException(confId);
}
Query query = em.createQuery("from Article a WHERE a.conference = ? ORDER BY a.title");

View File

@@ -9,8 +9,12 @@ import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.yacos.core.exceptions.ConferenceDoesntExistException;
import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role;
import org.yacos.core.users.User;
import org.yacos.core.users.Role.RoleType;
@Stateless
@@ -111,4 +115,53 @@ public class ConferenceManagerBean implements IConferenceManager {
return (this.getConference(conferenceId)!=null);
}
/* ================================================ */
/* = Invitation management methods implementation = */
/* ================================================ */
public InvitationToken addInvitationToken(String email, RoleType role,
Integer conferenceId) throws ConferenceDoesntExistException {
Conference conf = getConference(conferenceId);
if(conf == null){
throw new ConferenceDoesntExistException(conferenceId);
}
InvitationTokenPK tokenPK = new InvitationTokenPK();
tokenPK.email = email;
tokenPK.role = role;
tokenPK.conference = conf;
InvitationToken newToken = em.find(InvitationToken.class, tokenPK);
if(newToken == null){
newToken = new InvitationToken();
newToken.setEmail(email);
newToken.setRole(role);
newToken.setConference(conf);
em.persist(newToken);
}
return newToken;
}
public void removeInvitationToken(InvitationToken token) {
token = em.find(InvitationToken.class, token.getId());
em.remove(token);
}
public InvitationToken getInvitationToken(InvitationTokenPK tokenId) {
return em.find(InvitationToken.class, tokenId);
}
@SuppressWarnings("unchecked")
public List<InvitationToken> getInvitationTokensForConference(Integer conferenceId) {
Conference conf = em.find(Conference.class, conferenceId);
Query query = em.createQuery("from InvitationToken where conference=?");
query.setParameter(1, conf);
return query.getResultList();
}
}

View File

@@ -5,13 +5,17 @@ import java.util.List;
import javax.ejb.Remote;
import org.yacos.core.exceptions.ConferenceDoesntExistException;
import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role;
import org.yacos.core.users.User;
import org.yacos.core.users.Role.RoleType;
@Remote
public interface IConferenceManager {
//CRUD methodes
// CRUD methods
public Conference addConference(String titre, String descirption, String infoComplementray, Date dataAbstract, Date dateArticle, Date dateEvaluation, Date dateStart, Date dateEnd);
public Conference getConference(Integer id);
@@ -24,16 +28,22 @@ public interface IConferenceManager {
//public void addArticle(User user);
//public Collection<Article> getArticles(Integer id);
//list methodes
// Listing methods
public List<Conference> getConferences();
public List<Conference> getConferences(User user);
//role et user methode
// Role and User management methods
public Role addRole(Role.RoleType roleType, String login, Integer confId);
public void removeRole(Role role);
public List<Role> getRoles(Conference conf);
public List<Role> getRoles(String userLogin, Integer confId);
public void updateRole(Role role);
public boolean exists(Integer conferenceId);
// Invitation management methods
public InvitationToken getInvitationToken(InvitationTokenPK tokenId);
public List<InvitationToken> getInvitationTokensForConference(Integer conferenceId);
public InvitationToken addInvitationToken(String email, RoleType role, Integer conferenceId) throws ConferenceDoesntExistException;
public void removeInvitationToken(InvitationToken tokenId);
}

View File

@@ -1,7 +1,21 @@
package org.yacos.core.exceptions;
public class ConferenceDoesntExistException extends Exception {
import java.io.Serializable;
public class ConferenceDoesntExistException extends Exception implements Serializable {
private static final long serialVersionUID = 1L;
private Integer conferenceId;
public ConferenceDoesntExistException(Integer conferenceId) {
this.conferenceId = conferenceId;
}
public Integer getConferenceId() {
return conferenceId;
}
public void setConferenceId(Integer conferenceId) {
this.conferenceId = conferenceId;
}
}

View File

@@ -0,0 +1,76 @@
/**
*
*/
package org.yacos.core.system;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.yacos.core.conferences.Conference;
import org.yacos.core.users.Role.RoleType;
/**
* Token for an invitation.
* Gives the ability for a user to gain role for a conference at registration time.
* Allow a chairman or a PC member to gives a PC Member or Referee role to a person not yet registered.
* @author christiancorsano
*
*/
@Entity
@IdClass(InvitationTokenPK.class)
public class InvitationToken implements Serializable {
private static final long serialVersionUID = -7383377207105284233L;
@Id
private String email;
@Id
@Enumerated(EnumType.ORDINAL)
private RoleType role;
@Id
@ManyToOne(targetEntity=Conference.class,optional=false)
@JoinColumn(name="conference_id",nullable=false)
private Conference conference;
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
@Enumerated(EnumType.ORDINAL)
public RoleType getRole(){
return role;
}
@Enumerated(EnumType.ORDINAL)
public void setRole(RoleType role){
this.role = role;
}
@ManyToOne(targetEntity=Conference.class,optional=false)
@JoinColumn(name="conference_id",nullable=false)
public Conference getConference(){
return conference;
}
@ManyToOne(targetEntity=Conference.class,optional=false)
@JoinColumn(name="conference_id",nullable=false)
public void setConference(Conference conf){
this.conference = conf;
}
public InvitationTokenPK getId(){
return new InvitationTokenPK(email,role,conference);
}
}

View File

@@ -0,0 +1,58 @@
package org.yacos.core.system;
import java.io.Serializable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import org.yacos.core.conferences.Conference;
import org.yacos.core.users.Role.RoleType;
/**
* Primary key class for the {@link InvitationToken} entity
* @author christiancorsano
*
*/
public class InvitationTokenPK implements Serializable {
private static final long serialVersionUID = 1L;
/**
* PK attribute : email
*/
public String email;
/**
* PK attribute : role
*/
public RoleType role;
/**
* PK attribute : conference
*/
@ManyToOne(targetEntity=Conference.class,optional=false)
@JoinColumn(name="conference_id",nullable=false)
public Conference conference;
public InvitationTokenPK(String email2, RoleType role2,
Conference conference2) {
this.email = email2;
this.role = role2;
this.conference = conference2;
}
public InvitationTokenPK() {
}
@Override
public boolean equals(Object obj) {
if(obj instanceof InvitationTokenPK){
InvitationTokenPK objPK = (InvitationTokenPK) obj;
return this.email.equals(objPK.email)
&& this.role.equals(objPK.role)
&& this.conference.getId().equals(objPK.conference.getId());
} else {
return false;
}
}
@Override
public int hashCode() {
return this.email.hashCode() ^ this.role.hashCode() ^ conference.getId().hashCode();
}
}

View File

@@ -6,6 +6,8 @@ import javax.ejb.Remote;
import org.yacos.core.conferences.Conference;
import org.yacos.core.exceptions.PKAlreadyUsedException;
import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role.RoleType;
/**
@@ -15,7 +17,7 @@ import org.yacos.core.users.Role.RoleType;
@Remote
public interface IUserManager {
//crud methode
// crud methods
public User addUser(String login, String password, String firstName,
String lastName, String organization, String email) throws PKAlreadyUsedException;
public void removeUser(String login);
@@ -23,7 +25,7 @@ public interface IUserManager {
public void UpdateUser(User user);
public Boolean exists(String login);
// methodes lister
// Lists methods
public List<User> getUsers();
public List<User> getUsers(Conference conf);
public List<User> getUsers(int conf_id,Role.RoleType type);
@@ -41,4 +43,9 @@ public interface IUserManager {
* @param conferenceId The id of the conference for which the Role is to be removed
*/
public void removeRole(String userLogin, RoleType roleType, int conferenceId);
public boolean hasRoleForConference(String userLogin, RoleType roleType, Integer conferenceId);
// InvitationToken handling methods
public List<InvitationToken> getInvitationTokensForEmail(String email);
public void useInvitationTokenOnUser(String userLogin, InvitationTokenPK tokenId);
}

View File

@@ -3,14 +3,11 @@ package org.yacos.core.users;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import org.yacos.core.article.Article;
import org.yacos.core.conferences.Conference;

View File

@@ -13,6 +13,8 @@ import javax.persistence.Query;
import org.yacos.core.conferences.Conference;
import org.yacos.core.exceptions.PKAlreadyUsedException;
import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role.RoleType;
/**
@@ -42,6 +44,13 @@ public class UserManagerBean implements IUserManager{
User user = new User(login, password, firstName, lastName, organization, email);
em.persist(user);
em.flush();
// Existing InvitationToken handling
List<InvitationToken> tokens = getInvitationTokensForEmail(user.getEmail());
for(InvitationToken token : tokens){
useInvitationTokenOnUser(login, token.getId());
}
return user;
}
else{ throw new PKAlreadyUsedException(); }
@@ -108,4 +117,27 @@ public class UserManagerBean implements IUserManager{
em.remove(role);
}
@SuppressWarnings("unchecked")
public List<InvitationToken> getInvitationTokensForEmail(String email) {
Query query = em.createQuery("from InvitationToken where email=?");
query.setParameter(1, email);
return query.getResultList();
}
public void useInvitationTokenOnUser(String userLogin,
InvitationTokenPK tokenId) {
InvitationToken token = em.find(InvitationToken.class,tokenId);
addRoleForConference(userLogin, token.getRole(), token.getConference().getId());
em.remove(token);
}
public boolean hasRoleForConference(String userLogin, RoleType roleType,
Integer conferenceId) {
User user = getUser(userLogin);
Conference conf = em.find(Conference.class, conferenceId);
RolePK pk = new RolePK(user,roleType,conf);
Role role = em.find(Role.class, pk);
return role != null;
}
}