From 6b17649c080e2df91e883db7538a99ffbce37602 Mon Sep 17 00:00:00 2001 From: Christian Corsano Date: Thu, 7 Feb 2008 18:03:06 +0000 Subject: [PATCH] Correction de updateArticle : Passage de tout article en transactions --- .../org/yacos/core/article/Article.java | 509 +++++++++--------- .../core/article/ArticleManagerBean.java | 504 ++++++++++------- 2 files changed, 570 insertions(+), 443 deletions(-) diff --git a/YACOSCore/ejbModule/org/yacos/core/article/Article.java b/YACOSCore/ejbModule/org/yacos/core/article/Article.java index b041442..b04bdd7 100644 --- a/YACOSCore/ejbModule/org/yacos/core/article/Article.java +++ b/YACOSCore/ejbModule/org/yacos/core/article/Article.java @@ -1,256 +1,253 @@ -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; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -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 -public class Article implements Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - private int id; - private String title; - private String topic; - private String URL_article; - - @ManyToOne(targetEntity=Conference.class) - @JoinColumn(name="mainAuthor",nullable=false) - private User mainAuthor; - - private ArrayList secondaryAuthors; - - /** - * The conference this article has been submitted for - */ - @ManyToOne(targetEntity=Conference.class) - @JoinColumn(name="conference_id",nullable=false) - private Conference conference; - - @OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article") - private List delegation; - - /** - * The PC Members responsible for this article evaluation - */ - @ManyToMany(targetEntity=User.class) - @JoinTable( - name="articles_pcmembers_map", - joinColumns=@JoinColumn(name="user_id"), - inverseJoinColumns=@JoinColumn(name="article_id") - ) - private List pcMembers; - - @OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL) - private List preferences; - - @OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL) - private List report; - - - public enum State { - SUMMARY, FINAL , REJECTED, ACCEPTED - }; - @Enumerated(EnumType.ORDINAL) - private State state; - - - - public Article() { - secondaryAuthors = new ArrayList(); - } - - public Article(String title, String topic, - String url_article, User mainAuthor, - List secondaryAuthor, State state, Conference conference) { - //this.id = reference; - this.title = title; - this.topic = topic; - this.URL_article = url_article; - this.mainAuthor = mainAuthor; - if(secondaryAuthor != null){ - this.secondaryAuthors = new ArrayList(secondaryAuthor); - } else { - this.secondaryAuthors = new ArrayList(); - } - this.state = state; - pcMembers = new ArrayList(); - this.conference = conference; - } - - @Id - @GeneratedValue(strategy=GenerationType.AUTO) - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getTopic() { - return topic; - } - - public void setTopic(String topic) { - this.topic = topic; - } - - public String getURL_article() { - return URL_article; - } - - public void setURL_article(String url_article) { - URL_article = url_article; - } - - @ManyToOne(targetEntity=User.class) - @JoinColumn(name="mainAuthor",nullable=false) - public User getMainAuthor() { - return mainAuthor; - } - - @ManyToOne(targetEntity=User.class) - @JoinColumn(name="mainAuthor",nullable=false) - public void setMainAuthor(User mainAuthor) { - this.mainAuthor = mainAuthor; - } - - public ArrayList getSecondaryAuthors() { - return secondaryAuthors; - } - - public void setSecondaryAuthors(ArrayList secondaryAuthors) { - this.secondaryAuthors = new ArrayList(secondaryAuthors); - } - - @Enumerated(EnumType.ORDINAL) - public State getState() { - return state; - } - - @Enumerated(EnumType.ORDINAL) - public void setState(State state) { - this.state=state; - } - - @ManyToMany(targetEntity=User.class) - @JoinTable( - name="articles_pcmembers_map", - joinColumns=@JoinColumn(name="user_id"), - inverseJoinColumns=@JoinColumn(name="article_id") - ) - public List getPcMembers() { - return pcMembers; - } - @ManyToMany(targetEntity=User.class) - @JoinTable( - name="articles_pcmembers_map", - joinColumns=@JoinColumn(name="user_id"), - inverseJoinColumns=@JoinColumn(name="article_id") - ) - public void setPcMembers(List 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 delegateTo(User referee, User pcMember) { - /* if(pcMembers.contains(pcMember)){ - if(! referees.contains(referee)){ - referees.add(referee); - } - }*/ - } - @ManyToOne(targetEntity=Conference.class) - @JoinColumn(name="conference_id",nullable=false) - public Conference getConference(){ - return conference; - } - @ManyToOne(targetEntity=Conference.class) - @JoinColumn(name="conference_id",nullable=false) - public void setConference(Conference conference){ - this.conference = conference; - } - - /** - * @return the preferences - */ - @OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL) - public List getPreferences() { - return preferences; - } - - /** - * @param preferences the preferences to set - */ - @OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL) - public void setPreferences(List preferences) { - this.preferences = preferences; - } - - public boolean hasMember(){ - return false; - } - - @OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL) - public List getReport() { - return report; - } - @OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL) - public void setReport(List report) { - this.report = report; - } - - @OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article") - public List getDelegation() { - return delegation; - } - - @OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article") - public void setDelegation(List delegation) { - this.delegation = delegation; - } - - -} +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; +import javax.persistence.Enumerated; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +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.User; + +@Entity +public class Article implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private int id; + private String title; + private String topic; + private String URL_article; + + @ManyToOne(targetEntity=Conference.class) + @JoinColumn(name="mainAuthor",nullable=false) + private User mainAuthor; + + private ArrayList secondaryAuthors; + + /** + * The conference this article has been submitted for + */ + @ManyToOne(targetEntity=Conference.class) + @JoinColumn(name="conference_id",nullable=false) + private Conference conference; + + @OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article") + private List delegation; + + /** + * The PC Members responsible for this article evaluation + */ + @ManyToMany(targetEntity=User.class) + @JoinTable( + name="articles_pcmembers_map", + joinColumns=@JoinColumn(name="user_id"), + inverseJoinColumns=@JoinColumn(name="article_id") + ) + private List pcMembers; + + @OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL) + private List preferences; + + @OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL) + private List report; + + + public enum State { + SUMMARY, FINAL , REJECTED, ACCEPTED + }; + @Enumerated(EnumType.ORDINAL) + private State state; + + + + public Article() { + secondaryAuthors = new ArrayList(); + } + + public Article(String title, String topic, + String url_article, User mainAuthor, + List secondaryAuthor, State state, Conference conference) { + //this.id = reference; + this.title = title; + this.topic = topic; + this.URL_article = url_article; + this.mainAuthor = mainAuthor; + if(secondaryAuthor != null){ + this.secondaryAuthors = new ArrayList(secondaryAuthor); + } else { + this.secondaryAuthors = new ArrayList(); + } + this.state = state; + pcMembers = new ArrayList(); + this.conference = conference; + } + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getTopic() { + return topic; + } + + public void setTopic(String topic) { + this.topic = topic; + } + + public String getURL_article() { + return URL_article; + } + + public void setURL_article(String url_article) { + URL_article = url_article; + } + + @ManyToOne(targetEntity=User.class) + @JoinColumn(name="mainAuthor",nullable=false) + public User getMainAuthor() { + return mainAuthor; + } + + @ManyToOne(targetEntity=User.class) + @JoinColumn(name="mainAuthor",nullable=false) + public void setMainAuthor(User mainAuthor) { + this.mainAuthor = mainAuthor; + } + + public ArrayList getSecondaryAuthors() { + return secondaryAuthors; + } + + public void setSecondaryAuthors(ArrayList secondaryAuthors) { + this.secondaryAuthors = new ArrayList(secondaryAuthors); + } + + @Enumerated(EnumType.ORDINAL) + public State getState() { + return state; + } + + @Enumerated(EnumType.ORDINAL) + public void setState(State state) { + this.state=state; + } + + @ManyToMany(targetEntity=User.class) + @JoinTable( + name="articles_pcmembers_map", + joinColumns=@JoinColumn(name="user_id"), + inverseJoinColumns=@JoinColumn(name="article_id") + ) + public List getPcMembers() { + return pcMembers; + } + @ManyToMany(targetEntity=User.class) + @JoinTable( + name="articles_pcmembers_map", + joinColumns=@JoinColumn(name="user_id"), + inverseJoinColumns=@JoinColumn(name="article_id") + ) + public void setPcMembers(List 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 delegateTo(User referee, User pcMember) { + /* if(pcMembers.contains(pcMember)){ + if(! referees.contains(referee)){ + referees.add(referee); + } + }*/ + } + @ManyToOne(targetEntity=Conference.class) + @JoinColumn(name="conference_id",nullable=false) + public Conference getConference(){ + return conference; + } + @ManyToOne(targetEntity=Conference.class) + @JoinColumn(name="conference_id",nullable=false) + public void setConference(Conference conference){ + this.conference = conference; + } + + /** + * @return the preferences + */ + @OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL) + public List getPreferences() { + return preferences; + } + + /** + * @param preferences the preferences to set + */ + @OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL) + public void setPreferences(List preferences) { + this.preferences = preferences; + } + + public boolean hasMember(){ + return false; + } + + @OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL) + public List getReport() { + return report; + } + @OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL) + public void setReport(List report) { + this.report = report; + } + + @OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article") + public List getDelegation() { + return delegation; + } + + @OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article") + public void setDelegation(List delegation) { + this.delegation = delegation; + } + + +} diff --git a/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java b/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java index 6f9b23a..2e84e63 100644 --- a/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java +++ b/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java @@ -1,188 +1,318 @@ -package org.yacos.core.article; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -import javax.ejb.Stateless; -import javax.ejb.TransactionManagement; -import javax.ejb.TransactionManagementType; -import javax.persistence.EntityManager; -import javax.persistence.NoResultException; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - -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.User; - -@Stateless -@TransactionManagement(TransactionManagementType.CONTAINER) -public class ArticleManagerBean implements IArticleManager, Serializable { - - /** - * - */ - private static final long serialVersionUID = 1L; - - @PersistenceContext - private EntityManager em; - - public ArticleManagerBean() { - - } - - public Article addArticle(String title, String topic,String url_article, - String mainAuthorLogin, ArrayList 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; - } +package org.yacos.core.article; - public void updateArticle(Article article) { - em.merge(article); - em.flush(); - } - - public void removeArticle(Integer articleId) { - Article article = this.getArticle(articleId); - em.remove(article); - em.flush(); - } - - public Article getArticle(Integer articleId) { - return em.find(Article.class, articleId); - } - - @SuppressWarnings("unchecked") - public List
getArticles(Integer confId) throws ConferenceDoesntExistException { - if(confId == null){ - throw new ConferenceDoesntExistException(confId); - } - Conference conf = em.find(Conference.class, confId); - if(conf == null){ - throw new ConferenceDoesntExistException(confId); - } - - Query query = em.createQuery("from Article a WHERE a.conference = ? ORDER BY a.title"); - query.setParameter(1, conf); - return query.getResultList(); - } - - @SuppressWarnings("unchecked") - public List
getArticleOfAuthor(Integer confId, String authorId) { - Conference conf = em.find(Conference.class, confId); - User author = em.find(User.class, authorId); - Query query = em.createQuery("from Article a WHERE conference = ? and mainAuthor = ? ORDER BY a.title"); - query.setParameter(1, conf); - query.setParameter(2, author); - return query.getResultList(); - } - - public List
getArticlesOfMember(Integer confId, String memberId){ - //TODO - return null; - } - - 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); - } - - public void unassignArticleToPCMember(Integer articleId,String memberId){ - Article article = this.getArticle(articleId); - User PCMember = em.find(User.class, memberId); - article.removePCMember(PCMember); - this.updateArticle(article); - } - - public List getArticlePCMembers(Integer articleId) { - Article article = this.getArticle(articleId); - List users = (List)article.getPcMembers(); - return users; - } - - public void delegateArticleToReferee(Integer articleId, String refereeId, String memberId){ - Article article = this.getArticle(articleId); - User PCMember = em.find(User.class, memberId); - User referee = em.find(User.class, refereeId); - article.delegateTo(referee,PCMember); - } - - - - - /* - * gestion des preferences - */ - - - 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; - } - - - public void removePreference(Integer article_id, String userLogin){ - Preference pref = this.getPreferenceForUserAndArticle(article_id, userLogin); - em.remove(pref); - } - - public void updatePreference(Preference preference){ - em.merge(preference); - em.flush(); - } - - public Preference getPreferenceForUserAndArticle(Integer article_id, String pcMemberLogin){ - PreferencePK preferenceid = new PreferencePK(); - preferenceid.article = em.find(Article.class, article_id); - preferenceid.pcMember = em.find(User.class, pcMemberLogin); - try { - return (Preference) em.find(Preference.class, preferenceid); - } catch (NoResultException e) { - return null; - } - } - - @SuppressWarnings("unchecked") - public List getPreferencesForArticle(Integer article_id){ - Query query = em.createQuery("from Preference p WHERE article_id = ?"); - query.setParameter(1, article_id); - return query.getResultList(); - } - - - public boolean existsArticle(Integer articleId) { - return em.find(Article.class, articleId)!=null; - } - - public boolean existsPreference(Preference preference) { - return em.find(Preference.class, preference.getId())!=null; - } - - public EntityManager getEntityManager() { - return em; - } - - -} +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; +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.BEAN) +public class ArticleManagerBean implements IArticleManager, Serializable { + + /** + * + */ + private static final long serialVersionUID = 1L; + + @PersistenceContext + private EntityManager em; + + @Resource + private UserTransaction ut; + + public ArticleManagerBean() { + + } + + public Article addArticle(String title, String topic,String url_article, + String mainAuthorLogin, ArrayList secondaryAuthors, State state,Integer conferenceId) { + + 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) { + 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) { + 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) { + return em.find(Article.class, articleId); + } + + @SuppressWarnings("unchecked") + public List
getArticles(Integer confId) throws ConferenceDoesntExistException { + if(confId == null){ + throw new ConferenceDoesntExistException(confId); + } + Conference conf = em.find(Conference.class, confId); + if(conf == null){ + throw new ConferenceDoesntExistException(confId); + } + + Query query = em.createQuery("from Article a WHERE a.conference = ? ORDER BY a.title"); + query.setParameter(1, conf); + return query.getResultList(); + } + + @SuppressWarnings("unchecked") + public List
getArticleOfAuthor(Integer confId, String authorId) { + Conference conf = em.find(Conference.class, confId); + User author = em.find(User.class, authorId); + Query query = em.createQuery("from Article a WHERE conference = ? and mainAuthor = ? ORDER BY a.title"); + query.setParameter(1, conf); + query.setParameter(2, author); + return query.getResultList(); + } + + public List
getArticlesOfMember(Integer confId, String memberId){ + //TODO + return null; + } + + public void assignArticleToPCMember(Integer articleId,String memberId){ + 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.getPcMembers().remove(PCMember); + //article.removePCMember(PCMember); + this.updateArticle(article); + } + + public List getArticlePCMembers(Integer articleId) { + Article article = this.getArticle(articleId); + List users = (List)article.getPcMembers(); + return users; + } + + public void delegateArticleToReferee(Integer articleId, String refereeId, String memberId){ + Article article = this.getArticle(articleId); + User PCMember = em.find(User.class, memberId); + User referee = em.find(User.class, refereeId); + article.delegateTo(referee,PCMember); + } + + + + + /* + * gestion des preferences + */ + + + public Preference addPreference(Integer article_id, String userLogin,PreferenceType preferenceType){ + 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){ + 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){ + 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){ + PreferencePK preferenceid = new PreferencePK(); + preferenceid.article = em.find(Article.class, article_id); + preferenceid.pcMember = em.find(User.class, pcMemberLogin); + try { + return (Preference) em.find(Preference.class, preferenceid); + } catch (NoResultException e) { + return null; + } + } + + @SuppressWarnings("unchecked") + public List getPreferencesForArticle(Integer article_id){ + Query query = em.createQuery("from Preference p WHERE article_id = ?"); + query.setParameter(1, article_id); + return query.getResultList(); + } + + + public boolean existsArticle(Integer articleId) { + return em.find(Article.class, articleId)!=null; + } + + public boolean existsPreference(Preference preference) { + 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; + } + + +}