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);
+ }
}