Ajout des transactions dans ConferenceManagerBean
Ajout des conferenceCreationToken
Corrections diverses
This commit is contained in:
2008-02-15 10:08:51 +00:00
parent 46f144e03e
commit 21ee0e7096
7 changed files with 415 additions and 128 deletions

View File

@@ -229,8 +229,8 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
.setParameter("article", article)
.setParameter("referee", referee)
.setParameter("pcMember", PCMember);
@SuppressWarnings("unused")
int affectedRows = query.executeUpdate();
System.out.println("Affected Rows :"+affectedRows);
ut.commit();
} catch (Exception e) {
try{

View File

@@ -10,13 +10,16 @@ import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import org.yacos.core.article.Article;
import org.yacos.core.evaluation.Criterion;
import org.yacos.core.users.Role;
import org.yacos.core.users.User;
@Entity
@@ -44,40 +47,37 @@ public class Conference implements Serializable{
/**
* Roles of users for this conference
*/
@OneToMany(targetEntity=Role.class,mappedBy="conference")
@OneToMany(targetEntity=Role.class,mappedBy="conference",cascade={CascadeType.ALL})
private List<Role> roles;
/* @OneToOne(targetEntity=User.class,optional=true)
@JoinColumn(name="chairman_id",nullable=true)
@OneToOne(targetEntity=User.class,optional=false)
@JoinColumn(name="chairman_id",nullable=false)
private User chairman;
*/
@OneToMany(targetEntity=Article.class,mappedBy="conference")
private List<Article> articles;
@OneToMany(targetEntity=Criterion.class,mappedBy="conference",cascade=CascadeType.ALL)
private List<Criterion> criterions;
/*
/**
* @return the chairman
*/
/*
@OneToOne(targetEntity=User.class,optional=true)
@JoinColumn(name="chairman_id",nullable=true)
public User getChairman() {
return chairman;
}
*/
/**
* @param chairman the chairman to set
*/
/*
@OneToOne(targetEntity=User.class,optional=true)
@JoinColumn(name="chairman_id",nullable=true)
public void setChairman(User chairman) {
this.chairman = chairman;
}
*/
@Temporal(TemporalType.DATE)
public Date getDateAbstract() {
return dateAbstract;
@@ -179,12 +179,12 @@ public class Conference implements Serializable{
/*
* roles
*/
@OneToMany(targetEntity=Role.class,mappedBy="conference")
@OneToMany(targetEntity=Role.class,mappedBy="conference",cascade={CascadeType.ALL})
public List<Role> getRoles() {
return roles;
}
@OneToMany(targetEntity=Role.class,mappedBy="conference")
@OneToMany(targetEntity=Role.class,mappedBy="conference",cascade={CascadeType.ALL})
public void setRoles(List<Role> roles) {
this.roles = roles;
}

View File

@@ -3,14 +3,17 @@ package org.yacos.core.conferences;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.transaction.UserTransaction;
import org.yacos.core.evaluation.Criterion;
import org.yacos.core.exceptions.ConferenceDoesntExistException;
import org.yacos.core.exceptions.NoConferenceCreationTokenLeftException;
import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role;
@@ -20,14 +23,42 @@ import org.yacos.core.users.Role.RoleType;
@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class ConferenceManagerBean implements IConferenceManager {
@PersistenceContext
EntityManager em;
@Resource
UserTransaction ut;
public Conference addConference(String titre, String descirption, String infoComplementray, Date dataAbstract, Date dateArticle, Date dateEvaluation, Date dateStart, Date dateEnd) {
Conference conf = new Conference(titre, descirption, infoComplementray, dataAbstract, dateArticle, dateEvaluation, dateStart, dateEnd);
public Conference addConference(
String titre,
String chairmanLogin,
String description,
String complementaryInfo,
Date dataAbstract,
Date dateArticle,
Date dateEvaluation,
Date dateStart,
Date dateEnd) throws NoConferenceCreationTokenLeftException {
Conference conf = new Conference(titre, description, complementaryInfo, dataAbstract, dateArticle, dateEvaluation, dateStart, dateEnd);
if( ! canCreateConference(chairmanLogin)){
throw new NoConferenceCreationTokenLeftException();
}
try {
ut.begin();
User chairman = em.find(User.class, chairmanLogin);
em.persist(conf);
em.flush();
conf.setChairman(chairman);
chairman.setConferenceCreationTokens(chairman.getConferenceCreationTokens()-1);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
return conf;
}
@@ -36,14 +67,40 @@ public class ConferenceManagerBean implements IConferenceManager {
}
public void remove(Integer conferenceId) {
try {
ut.begin();
Conference persistedConf = em.find(Conference.class, conferenceId);
em.remove(persistedConf);
em.flush();
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void update(Conference conf) {
em.merge(conf);
em.flush();
try {
ut.begin();
Conference persistedConf = em.find(Conference.class, conf.getId());
persistedConf.setDateAbstract(conf.getDateAbstract());
persistedConf.setDateArticle(conf.getDateArticle());
persistedConf.setDateEnd(conf.getDateEnd());
persistedConf.setDateEvaluation(conf.getDateEvaluation());
persistedConf.setDateStart(conf.getDateStart());
persistedConf.setOtherInformations(conf.getOtherInformations());
persistedConf.setTitle(conf.getTitle());
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@@ -73,30 +130,80 @@ public class ConferenceManagerBean implements IConferenceManager {
* */
public Role addRole(Role.RoleType roleType, String login, Integer confId) {
try {
ut.begin();
User user = em.find(User.class, login);
Conference conf = em.find(Conference.class, confId);
Role role = new Role(roleType, user, conf);
em.persist(role);
em.flush();
ut.commit();
return role;
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
return null;
}
public void removeRole(Role role) {
em.remove(role);
em.flush();
try {
ut.begin();
RolePK rolePk = new RolePK(
role.getUser(),
role.getType(),
role.getConference());
Role rolePersisted = em.find(Role.class, rolePk);
em.remove(rolePersisted);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void removePCMemberForConf(Integer confId) {
try {
ut.begin();
Conference conf = em.find(Conference.class, confId);
Query query = em.createQuery("delete from Role where conference=? and type=?");
query.setParameter(1, conf);
query.setParameter(2, RoleType.PCMEMBER);
query.executeUpdate();
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void updateRole(Role role){
em.merge(role);
em.flush();
try {
ut.begin();
RolePK rolePk = new RolePK(
role.getUser(),
role.getType(),
role.getConference());
Role rolePersisted = em.find(Role.class, rolePk);
rolePersisted.setUser(role.getUser());
rolePersisted.setType(role.getType());
rolePersisted.setConference(role.getConference());
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@@ -148,20 +255,40 @@ public class ConferenceManagerBean implements IConferenceManager {
InvitationToken newToken = em.find(InvitationToken.class, tokenPK);
if(newToken == null){
try {
ut.begin();
newToken = new InvitationToken();
newToken.setEmail(email);
newToken.setRole(role);
newToken.setConference(conf);
em.persist(newToken);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
return newToken;
}
public void removeInvitationToken(InvitationToken token) {
try {
ut.begin();
token = em.find(InvitationToken.class, token.getId());
em.remove(token);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public InvitationToken getInvitationToken(InvitationTokenPK tokenId) {
@@ -178,26 +305,57 @@ public class ConferenceManagerBean implements IConferenceManager {
public void addCriterionToConference(Integer conferenceId, String name,
Integer minRating, Integer maxRating) {
Conference conf = getConference(conferenceId);
try {
ut.begin();
Conference conf = em.find(Conference.class, conferenceId);
Criterion criterion = new Criterion(name,minRating,maxRating,conf);
em.persist(criterion);
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void removeCriterionToConference(Integer conferenceId) {
try {
ut.begin();
Conference conf = em.find(Conference.class, conferenceId);
Query query = em.createQuery("delete from Criterion where conference=?");
query.setParameter(1, conf);
query.executeUpdate();
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void removeOneCriterionToConference(Criterion criterion) {
try {
ut.begin();
em.remove(criterion);
em.flush();
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void addPCMemberToConference(Integer conferenceId, String userLogin) {
Conference conf = getConference(conferenceId);
try {
ut.begin();
Conference conf = em.find(Conference.class,conferenceId);
User member = em.find(User.class, userLogin);
// First checks if the role already exists, if not create it
@@ -209,6 +367,73 @@ public class ConferenceManagerBean implements IConferenceManager {
memberRole.setConference(conf);
em.persist(memberRole);
}
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public void addConferenceCreationToken(String userLogin) {
try {
ut.begin();
User user = em.find(User.class,userLogin);
if(user != null){
user.setConferenceCreationTokens(
user.getConferenceCreationTokens()+1);
}
ut.commit();
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public boolean canCreateConference(String userLogin) {
return conferenceCreationTokens(userLogin)>0;
}
public Integer conferenceCreationTokens(String userLogin) {
User user = em.find(User.class,userLogin);
if(user == null){
return 0;
}
return user.getConferenceCreationTokens();
}
public void useConferenceCreationToken(String userLogin) throws NoConferenceCreationTokenLeftException {
try {
ut.begin();
User user = em.find(User.class,userLogin);
if(user != null){
Integer tokensLeft = user.getConferenceCreationTokens();
if(tokensLeft>0){
user.setConferenceCreationTokens(tokensLeft-1);
} else {
throw new NoConferenceCreationTokenLeftException();
}
}
ut.commit();
} catch (NoConferenceCreationTokenLeftException e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
throw e;
} catch (Exception e) {
try {
ut.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
}

View File

@@ -7,6 +7,7 @@ import javax.ejb.Remote;
import org.yacos.core.evaluation.Criterion;
import org.yacos.core.exceptions.ConferenceDoesntExistException;
import org.yacos.core.exceptions.NoConferenceCreationTokenLeftException;
import org.yacos.core.system.InvitationToken;
import org.yacos.core.system.InvitationTokenPK;
import org.yacos.core.users.Role;
@@ -17,7 +18,16 @@ import org.yacos.core.users.Role.RoleType;
public interface IConferenceManager {
// CRUD methods
public Conference addConference(String titre, String descirption, String infoComplementray, Date dataAbstract, Date dateArticle, Date dateEvaluation, Date dateStart, Date dateEnd);
public Conference addConference(
String titre,
String chairmanLogin,
String description,
String complementaryInfo,
Date dataAbstract,
Date dateArticle,
Date dateEvaluation,
Date dateStart,
Date dateEnd) throws NoConferenceCreationTokenLeftException;
public Conference getConference(Integer id);
public void addCriterionToConference(Integer conferenceId,String name,Integer minRating, Integer maxRating);
public void removeCriterionToConference(Integer conferenceId);
@@ -52,4 +62,26 @@ public interface IConferenceManager {
public List<InvitationToken> getInvitationTokensForConference(Integer conferenceId);
public InvitationToken addInvitationToken(String email, RoleType role, Integer conferenceId) throws ConferenceDoesntExistException;
public void removeInvitationToken(InvitationToken tokenId);
// Conference creation tokens handling methods
/**
* @return True if the given user has a conference creation token left, false otherwise
*/
public boolean canCreateConference(String userLogin);
/**
* Use (remove) a conference creation token for the given user
* @param userLogin The user from which to remove a token
*/
public void useConferenceCreationToken(String userLogin) throws NoConferenceCreationTokenLeftException;
/**
* Gets the number of conference creation token left for a given user
* @param userLogin The user
* @return The number of token the user has left
*/
public Integer conferenceCreationTokens(String userLogin);
/**
* Adds a conference creation token to the given user
* @param userLogin The user to which we grant the token
*/
public void addConferenceCreationToken(String userLogin);
}

View File

@@ -3,6 +3,8 @@ package org.yacos.core.users;
import java.util.List;
import javax.ejb.Remote;
import org.yacos.core.exceptions.NoConferenceCreationTokenLeftException;
import org.yacos.core.exceptions.PKAlreadyUsedException;
import org.yacos.core.exceptions.UserEMailAlreadyExistsException;
import org.yacos.core.system.InvitationToken;

View File

@@ -79,6 +79,12 @@ public class User implements Serializable{
@OneToMany(cascade=CascadeType.ALL, targetEntity=Role.class,mappedBy="user")
private List<Role> roles;
/**
* How many conference can this user create ?
*/
@Column(nullable=false)
private Integer conferenceCreationTokens;
/*@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="user")
private List<Delegation> delegation;
*/
@@ -91,10 +97,12 @@ public class User implements Serializable{
this.lastName = lastName;
this.organization = organization;
this.email = email;
this.conferenceCreationTokens = 0;
}
public User() {
this.roles = new ArrayList<Role>();
this.conferenceCreationTokens = 0;
}
@Id
@@ -234,6 +242,23 @@ public class User implements Serializable{
this.specialities = specialities;
}
/**
* How many conferences can this user create ?
* @return The number of conferences this user can create
*/
@Column(nullable=false)
public Integer getConferenceCreationTokens() {
return conferenceCreationTokens;
}
/**
* Sets the number of conferences this user can create
* @param conferenceCreationTokens The number of conferences this user can create
*/
@Column(nullable=false)
public void setConferenceCreationTokens(Integer conferenceCreationTokens) {
this.conferenceCreationTokens = conferenceCreationTokens;
}
/*
@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="user")
public List<Delegation> getDelegation() {

View File

@@ -5,7 +5,6 @@ package org.yacos.core.users;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
@@ -54,19 +53,12 @@ public class UserManagerBean implements IUserManager{
if(this.getByEmail(email) != null){
throw new UserEMailAlreadyExistsException(email);
}
User user = null;
try{
ut.begin();
User user = new User(login, password, firstName, lastName, organization, email);
user = new User(login, password, firstName, lastName, organization, email);
em.persist(user);
ut.commit();
// Existing InvitationToken handling
List<InvitationToken> tokens = getInvitationTokensForEmail(user.getEmail());
for(InvitationToken token : tokens){
useInvitationTokenOnUser(login, token.getId());
}
return user;
} catch (Exception e) {
try {
ut.rollback();
@@ -76,9 +68,16 @@ public class UserManagerBean implements IUserManager{
}
}
// Existing InvitationToken handling
List<InvitationToken> tokens = getInvitationTokensForEmail(email);
for(InvitationToken token : tokens){
useInvitationTokenOnUser(login, token.getId());
}
return user;
}
else{ throw new PKAlreadyUsedException(); }
return null;
}
/**
@@ -134,6 +133,7 @@ public class UserManagerBean implements IUserManager{
updatedUser.setLastName(user.getLastName());
updatedUser.setOrganization(user.getOrganization());
updatedUser.setPassword(user.getPassword());
updatedUser.setConferenceCreationTokens(user.getConferenceCreationTokens());
ut.commit();
} catch (Exception e) {
try {
@@ -344,12 +344,16 @@ public class UserManagerBean implements IUserManager{
public void useInvitationTokenOnUser(String userLogin,
InvitationTokenPK tokenId) {
InvitationToken token = em.find(InvitationToken.class,tokenId);
addRoleForConference(userLogin, token.getRole(), token.getConference().getId());
User user = getUserByEmail(tokenId.email);
if(user==null){
return;
}
try {
ut.begin();
InvitationToken token = em.find(InvitationToken.class,tokenId);
Role role = new Role(token.getRole(),user,token.getConference());
em.remove(token);
em.persist(role);
ut.commit();
} catch (Exception e) {
try {
@@ -379,6 +383,7 @@ public class UserManagerBean implements IUserManager{
}
public User getUserByEmail(String email) {
email = email.toLowerCase();
Query query = em.createQuery("from User where email=?");
query.setParameter(1, email);
try{
@@ -388,6 +393,4 @@ public class UserManagerBean implements IUserManager{
return null;
}
}
}