Correction de updateArticle :

Passage de tout article en transactions
This commit is contained in:
2008-02-07 18:03:06 +00:00
parent 1740c0275b
commit 6b17649c08
2 changed files with 570 additions and 443 deletions

View File

@@ -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<String> 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> 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<User> pcMembers;
@OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL)
private List<Preference> preferences;
@OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL)
private List<Report> report;
public enum State {
SUMMARY, FINAL , REJECTED, ACCEPTED
};
@Enumerated(EnumType.ORDINAL)
private State state;
public Article() {
secondaryAuthors = new ArrayList<String>();
}
public Article(String title, String topic,
String url_article, User mainAuthor,
List<String> 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<String>(secondaryAuthor);
} else {
this.secondaryAuthors = new ArrayList<String>();
}
this.state = state;
pcMembers = new ArrayList<User>();
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<String> getSecondaryAuthors() {
return secondaryAuthors;
}
public void setSecondaryAuthors(ArrayList<String> secondaryAuthors) {
this.secondaryAuthors = new ArrayList<String>(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<User> 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<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 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<Preference> getPreferences() {
return preferences;
}
/**
* @param preferences the preferences to set
*/
@OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL)
public void setPreferences(List<Preference> preferences) {
this.preferences = preferences;
}
public boolean hasMember(){
return false;
}
@OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL)
public List<Report> getReport() {
return report;
}
@OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL)
public void setReport(List<Report> report) {
this.report = report;
}
@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article")
public List<Delegation> getDelegation() {
return delegation;
}
@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article")
public void setDelegation(List<Delegation> 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<String> 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> 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<User> pcMembers;
@OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL)
private List<Preference> preferences;
@OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL)
private List<Report> report;
public enum State {
SUMMARY, FINAL , REJECTED, ACCEPTED
};
@Enumerated(EnumType.ORDINAL)
private State state;
public Article() {
secondaryAuthors = new ArrayList<String>();
}
public Article(String title, String topic,
String url_article, User mainAuthor,
List<String> 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<String>(secondaryAuthor);
} else {
this.secondaryAuthors = new ArrayList<String>();
}
this.state = state;
pcMembers = new ArrayList<User>();
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<String> getSecondaryAuthors() {
return secondaryAuthors;
}
public void setSecondaryAuthors(ArrayList<String> secondaryAuthors) {
this.secondaryAuthors = new ArrayList<String>(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<User> 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<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 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<Preference> getPreferences() {
return preferences;
}
/**
* @param preferences the preferences to set
*/
@OneToMany(targetEntity=Preference.class,mappedBy="article", cascade=CascadeType.ALL)
public void setPreferences(List<Preference> preferences) {
this.preferences = preferences;
}
public boolean hasMember(){
return false;
}
@OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL)
public List<Report> getReport() {
return report;
}
@OneToMany(targetEntity=Report.class, mappedBy="article", cascade=CascadeType.ALL)
public void setReport(List<Report> report) {
this.report = report;
}
@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article")
public List<Delegation> getDelegation() {
return delegation;
}
@OneToMany(cascade=CascadeType.ALL, targetEntity=Delegation.class, mappedBy="article")
public void setDelegation(List<Delegation> delegation) {
this.delegation = delegation;
}
}

View File

@@ -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<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;
}
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<Article> 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<Article> 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<Article> 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<User> getArticlePCMembers(Integer articleId) {
Article article = this.getArticle(articleId);
List<User> users = (List<User>)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<Preference> 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<String> 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<Article> 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<Article> 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<Article> 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<User> getArticlePCMembers(Integer articleId) {
Article article = this.getArticle(articleId);
List<User> users = (List<User>)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<Preference> 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;
}
}