diff --git a/YACOSCore/ejbModule/META-INF/persistence.xml b/YACOSCore/ejbModule/META-INF/persistence.xml index 20c25ae..ea06972 100644 --- a/YACOSCore/ejbModule/META-INF/persistence.xml +++ b/YACOSCore/ejbModule/META-INF/persistence.xml @@ -4,6 +4,7 @@ + \ No newline at end of file diff --git a/YACOSCore/ejbModule/org/yacos/core/article/Article.java b/YACOSCore/ejbModule/org/yacos/core/article/Article.java index c444a97..403c45d 100644 --- a/YACOSCore/ejbModule/org/yacos/core/article/Article.java +++ b/YACOSCore/ejbModule/org/yacos/core/article/Article.java @@ -70,12 +70,12 @@ public class Article implements Serializable { @OneToMany(targetEntity=Preference.class,mappedBy="article") private Collection preferences; - - private int state; - public enum state { + public enum State { SUMMARY, FINAL }; + private State state; + public Article() { secondaryAuthors = new ArrayList(); @@ -83,7 +83,7 @@ public class Article implements Serializable { public Article(String title, String topic, String url_article, User mainAuthor, - List secondaryAuthor, int state, Conference conference) { + List secondaryAuthor, State state, Conference conference) { //this.id = reference; this.title = title; this.topic = topic; @@ -150,15 +150,15 @@ public class Article implements Serializable { return secondaryAuthors; } - public void setSecondaryAuthors(ArrayList secondaryAuthors) { - this.secondaryAuthors = secondaryAuthors; + public void setSecondaryAuthors(List secondaryAuthors) { + this.secondaryAuthors = new ArrayList(secondaryAuthors); } - public int getState() { + public State getState() { return state; } - public void setState(int state) { + public void setState(State state) { this.state = state; } diff --git a/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java b/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java index 2d29ad2..eb26281 100644 --- a/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java +++ b/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java @@ -9,7 +9,9 @@ import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.Query; +import org.yacos.core.article.Article.State; import org.yacos.core.conferences.Conference; +import org.yacos.core.conferences.ConferenceDoesntExistException; import org.yacos.core.users.User; @Stateless @@ -21,15 +23,25 @@ public class ArticleManagerBean implements IArticleManager, Serializable { private static final long serialVersionUID = 1L; @PersistenceContext - EntityManager em; + private EntityManager em; public ArticleManagerBean() { } public Article addArticle(String title, String topic,String url_article, - User mainAuthor, List secondaryAuthor, int state,Conference conference) { - Article a = new Article(title, topic, url_article, mainAuthor, secondaryAuthor, state, conference); + String mainAuthorLogin, List 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; } @@ -39,8 +51,9 @@ public class ArticleManagerBean implements IArticleManager, Serializable { } - public void removeArticle(Article a) { - em.remove(a); + public void removeArticle(Integer articleId) { + Article article = this.getArticle(articleId); + em.remove(article); em.flush(); } @@ -49,7 +62,11 @@ public class ArticleManagerBean implements IArticleManager, Serializable { } @SuppressWarnings("unchecked") - public List
getArticles(Conference conf) { + public List
getArticles(Integer confId) throws ConferenceDoesntExistException { + Conference conf = em.find(Conference.class, confId); + if(conf == null){ + throw new ConferenceDoesntExistException(); + } Query query = em.createQuery("from Article a WHERE conference = ? ORDER BY a.title"); query.setParameter(1, conf); return query.getResultList(); @@ -139,8 +156,8 @@ public class ArticleManagerBean implements IArticleManager, Serializable { em.merge(preference); } - public boolean existsArticle(Article article) { - return em.find(Article.class, article.getId())!=null; + public boolean existsArticle(Integer articleId) { + return em.find(Article.class, articleId)!=null; } public boolean existsPreference(Preference preference) { diff --git a/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java b/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java index 9f3f89a..a0b6a7f 100644 --- a/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java +++ b/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java @@ -4,7 +4,9 @@ import java.util.List; import javax.ejb.Remote; +import org.yacos.core.article.Article.State; import org.yacos.core.conferences.Conference; +import org.yacos.core.conferences.ConferenceDoesntExistException; import org.yacos.core.users.User; @@ -12,8 +14,8 @@ import org.yacos.core.users.User; public interface IArticleManager { public Article getArticle(Integer id); public Article addArticle(String title, String topic,String url_article, - User mainAuthor, List secondaryAuthor, int state,Conference conference); - public void removeArticle(Article a); + String mainauthor, List secondaryAuthor, State state,Integer integer); + public void removeArticle(Integer articleId); public void updateArticle(Article article); @@ -21,7 +23,7 @@ public interface IArticleManager { //liste d'articles //public List
getArticles(); - public List
getArticles(Conference conf); + public List
getArticles(Integer confId) throws ConferenceDoesntExistException; public List
getArticleOfAuthor(Conference conf, User Author); public List
getArticlesOfMember(Conference conf, User member); @@ -36,7 +38,7 @@ public interface IArticleManager { public void addOrUpdatePreference(Integer article_id, String userLogin, String preferenceValue); //FIXME interet ? - public boolean existsArticle(Article article); + public boolean existsArticle(Integer articleId); public boolean existsPreference(Preference preference); } diff --git a/YACOSCore/ejbModule/org/yacos/core/conferences/ConferenceDoesntExistException.java b/YACOSCore/ejbModule/org/yacos/core/conferences/ConferenceDoesntExistException.java new file mode 100644 index 0000000..2e0033f --- /dev/null +++ b/YACOSCore/ejbModule/org/yacos/core/conferences/ConferenceDoesntExistException.java @@ -0,0 +1,5 @@ +package org.yacos.core.conferences; + +public class ConferenceDoesntExistException extends Exception { + +} diff --git a/YACOSCore/ejbModule/org/yacos/core/conferences/ConferenceManagerBean.java b/YACOSCore/ejbModule/org/yacos/core/conferences/ConferenceManagerBean.java index c907e90..208408b 100644 --- a/YACOSCore/ejbModule/org/yacos/core/conferences/ConferenceManagerBean.java +++ b/YACOSCore/ejbModule/org/yacos/core/conferences/ConferenceManagerBean.java @@ -28,8 +28,8 @@ public class ConferenceManagerBean implements IConferenceManager { return em.find(Conference.class, id); } - public void remove(Conference conf) { - Conference persistedConf = em.find(Conference.class, conf.getId()); + public void remove(Integer conferenceId) { + Conference persistedConf = em.find(Conference.class, conferenceId); em.remove(persistedConf); } @@ -61,7 +61,9 @@ public class ConferenceManagerBean implements IConferenceManager { * méthodes relatives aux roles * */ - public void addRole(Role.RoleType roleType, User user, Conference conf) { + public void addRole(Role.RoleType roleType, String login, Integer confId) { + User user = em.find(User.class, login); + Conference conf = em.find(Conference.class, confId); Role role = new Role(roleType, user, conf); em.persist(role); } @@ -95,9 +97,9 @@ public class ConferenceManagerBean implements IConferenceManager { query.setParameter(2, user); return query.getResultList(); } - - - + public boolean exists(Integer conferenceId) { + return (this.getConference(conferenceId)!=null); + } } diff --git a/YACOSCore/ejbModule/org/yacos/core/conferences/IConferenceManager.java b/YACOSCore/ejbModule/org/yacos/core/conferences/IConferenceManager.java index d2a1410..ea1638a 100644 --- a/YACOSCore/ejbModule/org/yacos/core/conferences/IConferenceManager.java +++ b/YACOSCore/ejbModule/org/yacos/core/conferences/IConferenceManager.java @@ -15,7 +15,7 @@ public interface IConferenceManager { public Conference addConference(String titre, String descirption, String infoComplementray, Date dataAbstract, Date dateArticle, Date dateEvaluation, Date dateStart, Date dateEnd); public Conference getConference(Integer id); - public void remove(Conference conf); + public void remove(Integer conferenceId); public void update(Conference conf); //article methodes @@ -30,9 +30,10 @@ public interface IConferenceManager { //role et user methode - public void addRole(Role.RoleType roleType, User user, Conference conf); + public void addRole(Role.RoleType roleType, String login, Integer confId); public void removeRole(Role role); public List getRoles(Conference conf); public List getRoles(User user, Conference conf); public void updateRole(Role role); + public boolean exists(Integer conferenceId); } diff --git a/YACOSCore/ejbModule/org/yacos/core/users/IUserManager.java b/YACOSCore/ejbModule/org/yacos/core/users/IUserManager.java index f07edce..4c14ec5 100644 --- a/YACOSCore/ejbModule/org/yacos/core/users/IUserManager.java +++ b/YACOSCore/ejbModule/org/yacos/core/users/IUserManager.java @@ -6,15 +6,19 @@ import javax.ejb.Remote; import org.yacos.core.conferences.Conference; import org.yacos.core.exceptions.PKAlreadyUsedException; +import org.yacos.core.users.Role.RoleType; +/** + * @author christiancorsano + * + */ @Remote public interface IUserManager { //crud methode - public User addUser(String login, String password, String firstName, String lastName, String organization, String email) throws PKAlreadyUsedException; - public void removeUser(User user); + public void removeUser(String login); public User getUser(String login); public void UpdateUser(User user); public Boolean exists(String login); @@ -23,6 +27,18 @@ public interface IUserManager { public List getUsers(); public List getUsers(Conference conf); public List getUsers(Role.RoleType type); - - + /** + * Create and adds a role to a user + * @param login The login of the user + * @param role The role to grant to the user + * @param conferenceId The id of the conference for which the Role is to be granted + */ + public void addRoleForConference(String login, RoleType role, Integer conferenceId); + /** + * Remove a role from a user + * @param login The login of the user + * @param role The role to remove from the user + * @param conferenceId The id of the conference for which the Role is to be removed + */ + public void removeRole(String userLogin, RoleType roleType, int conferenceId); } diff --git a/YACOSCore/ejbModule/org/yacos/core/users/Role.java b/YACOSCore/ejbModule/org/yacos/core/users/Role.java index ebc9a9c..320be23 100644 --- a/YACOSCore/ejbModule/org/yacos/core/users/Role.java +++ b/YACOSCore/ejbModule/org/yacos/core/users/Role.java @@ -2,6 +2,7 @@ package org.yacos.core.users; import java.io.Serializable; +import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; @@ -27,20 +28,30 @@ public class Role implements Serializable { * */ private static final long serialVersionUID = 1L; - + + /** + * Dummy field to make the composite PK work despite the ManyToOne relationship + */ + @Id + @Column(name="user_id",insertable=false,updatable=false) + private String user_id; /** * User for which this role is defined * Primary Key */ - @Id @ManyToOne(targetEntity=User.class,optional=false) @JoinColumn(name="user_id",nullable=false) private User user; + /** + * Dummy field to make the composite PK work despite the ManyToOne relationship + */ + @Id + @Column(name="conference_id",insertable=false,updatable=false) + private Integer conference_id; /** * Conference for which this role is defined * Primary Key */ - @Id @ManyToOne(targetEntity=Conference.class,optional=false) @JoinColumn(name="conference_id",nullable=false) private Conference conference; @@ -65,36 +76,46 @@ public class Role implements Serializable { public Role(){ } - + + @ManyToOne(targetEntity=User.class,optional=false) + @JoinColumn(name="user_id",nullable=false) public User getUser() { return user; } - + @ManyToOne(targetEntity=User.class,optional=false) + @JoinColumn(name="user_id",nullable=false) public void setUser(User user) { this.user = user; + this.user_id = user.getLogin(); } - + @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 conference) { this.conference = conference; + this.conference_id = conference.getId(); } /** * @return the type of this role */ + @Enumerated(EnumType.ORDINAL) public RoleType getType() { return type; } /** * @param type the type of this role */ + @Enumerated(EnumType.ORDINAL) public void setType(RoleType type) { this.type = type; } diff --git a/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java b/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java index c13aaa0..e681208 100644 --- a/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java +++ b/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java @@ -1,11 +1,6 @@ package org.yacos.core.users; import java.io.Serializable; - -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; - import org.yacos.core.conferences.Conference; import org.yacos.core.users.Role.RoleType; @@ -15,25 +10,29 @@ public class RolePK implements Serializable{ * */ private static final long serialVersionUID = 1L; - + + /** + * Public key, as described here : http://www.jpox.org/docs/1_2/primary_key.html + */ + public String user_id; + /** + * Public key, as described here : http://www.jpox.org/docs/1_2/primary_key.html + */ + public Integer conference_id; /** * Public key, as described here : http://www.jpox.org/docs/1_2/primary_key.html */ public RoleType type; - /** - * Public key, as described here : http://www.jpox.org/docs/1_2/primary_key.html - */ - @Id - @ManyToOne(targetEntity=User.class,optional=false) - @JoinColumn(name="user_id",nullable=false) - public User user; - /** - * Public key, as described here : http://www.jpox.org/docs/1_2/primary_key.html - */ - @Id - @ManyToOne(targetEntity=Conference.class,optional=false) - @JoinColumn(name="conference_id",nullable=false) - public Conference conference; + + public RolePK() { + } + + public RolePK(User user, RoleType type, Conference conference) { + super(); + this.user_id = user.getLogin(); + this.type = type; + this.conference_id = conference.getId(); + } @Override public boolean equals(Object obj) { @@ -42,13 +41,13 @@ public class RolePK implements Serializable{ } RolePK otherPK = (RolePK) obj; return type.equals(otherPK.type)&& - user.getLogin().equals(otherPK.user.getLogin())&& - conference.getId() == otherPK.conference.getId(); + user_id.equals(otherPK.user_id)&& + conference_id == otherPK.conference_id; } @Override public int hashCode() { - return type.hashCode() ^ user.hashCode() ^ conference.hashCode(); + return type.hashCode() ^ user_id.hashCode() ^ conference_id.hashCode(); } } diff --git a/YACOSCore/ejbModule/org/yacos/core/users/User.java b/YACOSCore/ejbModule/org/yacos/core/users/User.java index 40e4d5d..9598022 100644 --- a/YACOSCore/ejbModule/org/yacos/core/users/User.java +++ b/YACOSCore/ejbModule/org/yacos/core/users/User.java @@ -4,8 +4,10 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.OneToMany; @@ -57,7 +59,7 @@ public class User implements Serializable{ /** * Roles for this user */ - @OneToMany(targetEntity=Role.class,mappedBy="user") + @OneToMany(targetEntity=Role.class,mappedBy="user",fetch=FetchType.EAGER,cascade=CascadeType.ALL) private List roles; @OneToMany(targetEntity=Article.class,mappedBy="mainAuthor") @@ -137,7 +139,7 @@ public class User implements Serializable{ return false; } - @OneToMany(targetEntity=Role.class,mappedBy="user") + @OneToMany(targetEntity=Role.class,mappedBy="user",fetch=FetchType.EAGER) public List getRoles(){ return roles; } @@ -160,7 +162,7 @@ public class User implements Serializable{ /** * @param roles the roles to set */ - @OneToMany(targetEntity=Role.class,mappedBy="user") + @OneToMany(targetEntity=Role.class,mappedBy="user",fetch=FetchType.EAGER) public void setRoles(List roles) { this.roles = roles; } diff --git a/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java b/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java index 71eea71..57e137c 100644 --- a/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java +++ b/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java @@ -51,8 +51,8 @@ public class UserManagerBean implements IUserManager{ * Removes a user from the system * @param user */ - public void removeUser(User user){ - User persistedUser = em.find(User.class, user.getLogin()); + public void removeUser(String login){ + User persistedUser = em.find(User.class, login); em.remove(persistedUser); } @@ -65,7 +65,7 @@ public class UserManagerBean implements IUserManager{ } public Boolean exists(String login){ - return (this.getUser(login)!= null); + return (this.getUser(login)!= null); } public List getUsers(Conference conf) { @@ -82,5 +82,26 @@ public class UserManagerBean implements IUserManager{ // TODO Auto-generated method stub return null; } + + public void addRoleForConference(String login, RoleType role, Integer conferenceId) { + User user = em.find(User.class, login); + Conference conference = em.find(Conference.class, conferenceId); + //if(user.hasRoleForConference(role, conference)){ + // return; + //} + + Role newRole = new Role(); + newRole.setUser(user); + newRole.setConference(conference); + newRole.setType(role); + em.persist(newRole); + } + + public void removeRole(String userLogin, RoleType roleType, int conferenceId) { + User user = em.find(User.class, userLogin); + Conference conference = em.find(Conference.class, conferenceId); + Role role = em.find(Role.class, new RolePK(user,roleType,conference)); + em.remove(role); + } }