Correction de updateArticle :
Passage de tout article en transactions
This commit is contained in:
@@ -3,7 +3,6 @@ package org.yacos.core.article;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
@@ -16,10 +15,8 @@ import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.OneToMany;
|
||||
|
||||
import org.yacos.core.conferences.Conference;
|
||||
import org.yacos.core.evaluation.Report;
|
||||
import org.yacos.core.users.Role;
|
||||
import org.yacos.core.users.User;
|
||||
|
||||
@Entity
|
||||
@@ -183,17 +180,17 @@ public class Article implements Serializable {
|
||||
public void setPcMembers(List<User> pcMembers) {
|
||||
this.pcMembers = pcMembers;
|
||||
}
|
||||
public void addPCMember(User pcMember){
|
||||
if(! pcMembers.contains(pcMember)){
|
||||
pcMembers.add(pcMember);
|
||||
}
|
||||
}
|
||||
|
||||
public void removePCMember(User pcMember){
|
||||
if(pcMembers.contains(pcMember)){
|
||||
pcMembers.remove(pcMember);
|
||||
}
|
||||
}
|
||||
// public void addPCMember(User pcMember){
|
||||
// if(! pcMembers.contains(pcMember)){
|
||||
// pcMembers.add(pcMember);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public void removePCMember(User pcMember){
|
||||
// if(pcMembers.contains(pcMember)){
|
||||
// pcMembers.remove(pcMember);
|
||||
// }
|
||||
// }
|
||||
|
||||
public void delegateTo(User referee, User pcMember) {
|
||||
/* if(pcMembers.contains(pcMember)){
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.ejb.Stateless;
|
||||
import javax.ejb.TransactionManagement;
|
||||
import javax.ejb.TransactionManagementType;
|
||||
@@ -11,15 +12,24 @@ import javax.persistence.EntityManager;
|
||||
import javax.persistence.NoResultException;
|
||||
import javax.persistence.PersistenceContext;
|
||||
import javax.persistence.Query;
|
||||
import javax.transaction.HeuristicMixedException;
|
||||
import javax.transaction.HeuristicRollbackException;
|
||||
import javax.transaction.NotSupportedException;
|
||||
import javax.transaction.RollbackException;
|
||||
import javax.transaction.SystemException;
|
||||
import javax.transaction.UserTransaction;
|
||||
|
||||
import org.yacos.core.article.Article.State;
|
||||
import org.yacos.core.article.Preference.PreferenceType;
|
||||
import org.yacos.core.conferences.Conference;
|
||||
import org.yacos.core.exceptions.ConferenceDoesntExistException;
|
||||
import org.yacos.core.users.Role;
|
||||
import org.yacos.core.users.RolePK;
|
||||
import org.yacos.core.users.User;
|
||||
import org.yacos.core.users.Role.RoleType;
|
||||
|
||||
@Stateless
|
||||
@TransactionManagement(TransactionManagementType.CONTAINER)
|
||||
@TransactionManagement(TransactionManagementType.BEAN)
|
||||
public class ArticleManagerBean implements IArticleManager, Serializable {
|
||||
|
||||
/**
|
||||
@@ -30,35 +40,82 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
|
||||
@PersistenceContext
|
||||
private EntityManager em;
|
||||
|
||||
@Resource
|
||||
private UserTransaction ut;
|
||||
|
||||
public ArticleManagerBean() {
|
||||
|
||||
}
|
||||
|
||||
public Article addArticle(String title, String topic,String url_article,
|
||||
String mainAuthorLogin, ArrayList<String> secondaryAuthors, State state,Integer conferenceId) {
|
||||
Article a = new Article();
|
||||
a.setTitle(title);
|
||||
a.setTopic(topic);
|
||||
a.setURL_article(url_article);
|
||||
User mainAuthor = em.find(User.class,mainAuthorLogin);
|
||||
a.setMainAuthor(mainAuthor);
|
||||
a.setSecondaryAuthors(secondaryAuthors);
|
||||
a.setState(state);
|
||||
Conference conference = em.find(Conference.class, conferenceId);
|
||||
a.setConference(conference);
|
||||
em.persist(a);
|
||||
return a;
|
||||
|
||||
try {
|
||||
ut.begin();
|
||||
Article a = new Article();
|
||||
a.setTitle(title);
|
||||
a.setTopic(topic);
|
||||
a.setURL_article(url_article);
|
||||
User mainAuthor = em.find(User.class,mainAuthorLogin);
|
||||
a.setMainAuthor(mainAuthor);
|
||||
a.setSecondaryAuthors(secondaryAuthors);
|
||||
a.setState(state);
|
||||
Conference conference = em.find(Conference.class, conferenceId);
|
||||
a.setConference(conference);
|
||||
em.persist(a);
|
||||
ut.commit();
|
||||
|
||||
addRoleForConference(mainAuthorLogin,RoleType.AUTHOR,conferenceId);
|
||||
|
||||
return a;
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
ut.rollback();
|
||||
e.printStackTrace();
|
||||
} catch (Exception e1) {
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void updateArticle(Article article) {
|
||||
em.merge(article);
|
||||
em.flush();
|
||||
try {
|
||||
ut.begin();
|
||||
Article persistentArticle = em.find(Article.class, article.getId());
|
||||
persistentArticle.setTitle(article.getTitle());
|
||||
persistentArticle.setTopic(article.getTopic());
|
||||
persistentArticle.setMainAuthor(article.getMainAuthor());
|
||||
persistentArticle.setURL_article(article.getURL_article());
|
||||
persistentArticle.setState(article.getState());
|
||||
persistentArticle.setSecondaryAuthors(article.getSecondaryAuthors());
|
||||
ut.commit();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
ut.rollback();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void removeArticle(Integer articleId) {
|
||||
Article article = this.getArticle(articleId);
|
||||
em.remove(article);
|
||||
em.flush();
|
||||
try {
|
||||
ut.begin();
|
||||
Article article = this.getArticle(articleId);
|
||||
em.remove(article);
|
||||
ut.commit();
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
ut.rollback();
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public Article getArticle(Integer articleId) {
|
||||
@@ -96,23 +153,36 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
|
||||
}
|
||||
|
||||
public void assignArticleToPCMember(Integer articleId,String memberId){
|
||||
Article article = this.getArticle(articleId);
|
||||
User PCMember = em.find(User.class, memberId);
|
||||
article.addPCMember(PCMember);
|
||||
this.updateArticle(article);
|
||||
try{
|
||||
ut.begin();
|
||||
Article article = this.getArticle(articleId);
|
||||
User PCMember = em.find(User.class, memberId);
|
||||
article.getPcMembers().add(PCMember);
|
||||
ut.commit();
|
||||
|
||||
this.updateArticle(article);
|
||||
} catch (Exception e) {
|
||||
try{
|
||||
ut.rollback();
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
//article.addPCMember(PCMember);
|
||||
}
|
||||
|
||||
public void unassignArticleToPCMember(Integer articleId,String memberId){
|
||||
Article article = this.getArticle(articleId);
|
||||
User PCMember = em.find(User.class, memberId);
|
||||
article.removePCMember(PCMember);
|
||||
article.getPcMembers().remove(PCMember);
|
||||
//article.removePCMember(PCMember);
|
||||
this.updateArticle(article);
|
||||
}
|
||||
|
||||
public List<User> getArticlePCMembers(Integer articleId) {
|
||||
Article article = this.getArticle(articleId);
|
||||
List<User> users = (List<User>)article.getPcMembers();
|
||||
return users;
|
||||
Article article = this.getArticle(articleId);
|
||||
List<User> users = (List<User>)article.getPcMembers();
|
||||
return users;
|
||||
}
|
||||
|
||||
public void delegateArticleToReferee(Integer articleId, String refereeId, String memberId){
|
||||
@@ -131,26 +201,58 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
|
||||
|
||||
|
||||
public Preference addPreference(Integer article_id, String userLogin,PreferenceType preferenceType){
|
||||
Preference preference = new Preference();
|
||||
Article article = getArticle(article_id);
|
||||
preference.setArticle(article);
|
||||
User pcMember = em.find(User.class, userLogin);
|
||||
preference.setPcMember(pcMember);
|
||||
preference.setPreferenceType(preferenceType);
|
||||
em.persist(preference);
|
||||
em.flush();
|
||||
return preference;
|
||||
try{
|
||||
ut.begin();
|
||||
Preference preference = new Preference();
|
||||
Article article = getArticle(article_id);
|
||||
preference.setArticle(article);
|
||||
User pcMember = em.find(User.class, userLogin);
|
||||
preference.setPcMember(pcMember);
|
||||
preference.setPreferenceType(preferenceType);
|
||||
em.persist(preference);
|
||||
ut.commit();
|
||||
return preference;
|
||||
} catch(Exception e){
|
||||
try {
|
||||
ut.rollback();
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public void removePreference(Integer article_id, String userLogin){
|
||||
Preference pref = this.getPreferenceForUserAndArticle(article_id, userLogin);
|
||||
em.remove(pref);
|
||||
try{
|
||||
ut.begin();
|
||||
Preference pref = this.getPreferenceForUserAndArticle(article_id, userLogin);
|
||||
em.remove(pref);
|
||||
ut.commit();
|
||||
} catch (Exception e) {
|
||||
try{
|
||||
ut.rollback();
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void updatePreference(Preference preference){
|
||||
em.merge(preference);
|
||||
em.flush();
|
||||
try{
|
||||
ut.begin();
|
||||
Preference persistedPreference = em.find(Preference.class, preference.getId());
|
||||
persistedPreference.setPreferenceType(preference.getPreferenceType());
|
||||
ut.commit();
|
||||
} catch (Exception e) {
|
||||
try{
|
||||
ut.rollback();
|
||||
} catch (Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public Preference getPreferenceForUserAndArticle(Integer article_id, String pcMemberLogin){
|
||||
@@ -180,6 +282,34 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
|
||||
return em.find(Preference.class, preference.getId())!=null;
|
||||
}
|
||||
|
||||
public boolean hasUserRoleForConference(String userLogin, RoleType roleType, Integer conferenceId){
|
||||
Conference conference = em.find(Conference.class, conferenceId);
|
||||
User user = em.find(User.class, userLogin);
|
||||
|
||||
RolePK rolePK = new RolePK(user,roleType,conference);
|
||||
return em.find(Role.class, rolePK)!=null;
|
||||
}
|
||||
|
||||
private void addRoleForConference(String userLogin, RoleType roleType, Integer conferenceId) {
|
||||
Conference conference = em.find(Conference.class, conferenceId);
|
||||
User user = em.find(User.class, userLogin);
|
||||
|
||||
if(! hasUserRoleForConference(userLogin, RoleType.AUTHOR, conferenceId)){
|
||||
Role role = new Role();
|
||||
role.setUser(user);
|
||||
role.setType(roleType);
|
||||
role.setConference(conference);
|
||||
|
||||
try{
|
||||
ut.begin();
|
||||
em.persist(role);
|
||||
ut.commit();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public EntityManager getEntityManager() {
|
||||
return em;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user