diff --git a/YACOSCore/ejbModule/META-INF/persistence.xml b/YACOSCore/ejbModule/META-INF/persistence.xml
index b9b98b2..20c25ae 100644
--- a/YACOSCore/ejbModule/META-INF/persistence.xml
+++ b/YACOSCore/ejbModule/META-INF/persistence.xml
@@ -3,6 +3,7 @@
java:/DefaultDS
+
\ No newline at end of file
diff --git a/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java b/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java
index a105f9c..6a39c9e 100644
--- a/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java
+++ b/YACOSCore/ejbModule/org/yacos/core/article/ArticleManagerBean.java
@@ -67,13 +67,13 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
return (List) article.getReferees();
}
- public Preference getArticlePreferenceForUser(Article article,
+ public Preference getArticlePreferenceForUser(Integer article_id,
String pcMemberLogin) {
- Query query = em.createQuery("SELECT p FROM Preference p WHERE p.article.id = :articleid AND p.pcMember.id = :pcmemberlogin");
- query.setParameter("articleid",article.getId());
- query.setParameter("pcmemberlogin", pcMemberLogin);
+ PreferencePK preferenceid = new PreferencePK();
+ preferenceid.article = em.find(Article.class, article_id);
+ preferenceid.pcMember = em.find(User.class, pcMemberLogin);
try {
- return (Preference) query.getSingleResult();
+ return (Preference) em.find(Preference.class, preferenceid);
} catch (NoResultException e) {
return null;
}
@@ -98,11 +98,20 @@ public class ArticleManagerBean implements IArticleManager, Serializable {
preference.setPcMember(pcMember);
preference.setPreference(preferenceValue);
em.persist(preference);
+ em.flush();
}
- public void addOrUpdatePreference(Preference preference){
- if(existsPreference(preference)){
- updatePreference(preference);
+ public void updateArticlePreference(Integer article_id, String userLogin, String preferenceValue) {
+ Preference preference = getArticlePreferenceForUser(article_id, userLogin);
+ preference.setPreference(preferenceValue);
+ em.merge(preference);
+ }
+
+ public void addOrUpdatePreference(Integer article_id, String userLogin, String preferenceValue){
+ Preference preference = getArticlePreferenceForUser(article_id, userLogin);
+ if(preference != null){
+ preference.setPreference(preferenceValue);
+ em.merge(preference);
} else {
addArticlePreference(preference);
}
diff --git a/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java b/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java
index a48c4c7..66b7da0 100644
--- a/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java
+++ b/YACOSCore/ejbModule/org/yacos/core/article/IArticleManager.java
@@ -15,10 +15,10 @@ public interface IArticleManager {
public List> getArticlePCMembers(Article article);
public List> getArticleReferees(Article article);
- public Preference getArticlePreferenceForUser(Article article, String pcMemberLogin);
+ public Preference getArticlePreferenceForUser(Integer article_id, String pcMemberLogin);
public void setArticlePreferences(Article article, List preferences);
public void addArticlePreference(Integer article_id, String userLogin, String preferenceValue);
- public void addOrUpdatePreference(Preference preference);
+ public void addOrUpdatePreference(Integer article_id, String userLogin, String preferenceValue);
public boolean existsArticle(Article article);
public boolean existsPreference(Preference preference);
diff --git a/YACOSCore/ejbModule/org/yacos/core/article/Preference.java b/YACOSCore/ejbModule/org/yacos/core/article/Preference.java
index 34d041e..076418e 100644
--- a/YACOSCore/ejbModule/org/yacos/core/article/Preference.java
+++ b/YACOSCore/ejbModule/org/yacos/core/article/Preference.java
@@ -80,8 +80,8 @@ public class Preference implements Serializable {
public PreferencePK getId(){
PreferencePK id = new PreferencePK();
- id.setArticle(this.article);
- id.setPcMember(this.pcMember);
+ id.article = this.article;
+ id.pcMember = this.pcMember;
return id;
}
}
diff --git a/YACOSCore/ejbModule/org/yacos/core/article/PreferencePK.java b/YACOSCore/ejbModule/org/yacos/core/article/PreferencePK.java
index 8f0b800..e86cf53 100644
--- a/YACOSCore/ejbModule/org/yacos/core/article/PreferencePK.java
+++ b/YACOSCore/ejbModule/org/yacos/core/article/PreferencePK.java
@@ -3,8 +3,19 @@ package org.yacos.core.article;
import java.io.Serializable;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
import org.yacos.core.users.User;
+/**
+ * PreferencePK
+ * Primary key for preferences
+ *
+ * @author christiancorsano
+ *
+ */
public class PreferencePK implements Serializable{
/**
@@ -12,23 +23,33 @@ public class PreferencePK implements Serializable{
*/
private static final long serialVersionUID = 1L;
- private User pcMember;
+ /**
+ * Public key, following these recomandations : http://www.jpox.org/docs/1_2/primary_key.html
+ */
+ @Id
+ @ManyToOne(targetEntity=User.class)
+ @JoinColumn(name="pcmember_id",nullable=false)
+ public User pcMember;
+ /**
+ * Public key, following these recomandations : http://www.jpox.org/docs/1_2/primary_key.html
+ */
+ @Id
+ @ManyToOne(targetEntity=Article.class)
+ @JoinColumn(name="article_id",nullable=false)
+ public Article article;
- private Article article;
-
- public User getPcMember() {
- return pcMember;
- }
-
- public void setPcMember(User pcMember) {
- this.pcMember = pcMember;
- }
-
- public Article getArticle() {
- return article;
- }
-
- public void setArticle(Article article) {
- this.article = article;
- }
+// @Override
+// public boolean equals(Object obj) {
+// if (! (obj instanceof PreferencePK) ) {
+// return false;
+// }
+// PreferencePK other = (PreferencePK) obj;
+// return this.pcMember.getLogin().equals(other.pcMember.getLogin()) &&
+// this.article.getId() == other.article.getId();
+// }
+//
+// @Override
+// public int hashCode() {
+// return this.pcMember.getLogin().hashCode() ^ this.article.getId();
+// }
}
diff --git a/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java b/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java
index 0687388..eb50fed 100644
--- a/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java
+++ b/YACOSCore/ejbModule/org/yacos/core/users/RolePK.java
@@ -12,30 +12,33 @@ public class RolePK implements Serializable{
*/
private static final long serialVersionUID = 1L;
- private RoleType type;
- private User user;
- private Conference conference;
+ /**
+ * 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
+ */
+ public User user;
+ /**
+ * Public key, as described here : http://www.jpox.org/docs/1_2/primary_key.html
+ */
+ public Conference conference;
-
-
- public RoleType getType() {
- return type;
- }
- public void setType(RoleType type) {
- this.type = type;
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- public Conference getConference() {
- return conference;
- }
- public void setConference(Conference conference) {
- this.conference = conference;
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof RolePK)) {
+ return false;
+ }
+ RolePK otherPK = (RolePK) obj;
+ return type.equals(otherPK.type)&&
+ user.getLogin().equals(otherPK.user.getLogin())&&
+ conference.getId() == otherPK.conference.getId();
}
+ @Override
+ public int hashCode() {
+ return type.hashCode() ^ user.hashCode() ^ conference.hashCode();
+ }
}
diff --git a/YACOSCore/ejbModule/org/yacos/core/users/User.java b/YACOSCore/ejbModule/org/yacos/core/users/User.java
index f95c56a..aa74f95 100644
--- a/YACOSCore/ejbModule/org/yacos/core/users/User.java
+++ b/YACOSCore/ejbModule/org/yacos/core/users/User.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
+import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@@ -29,6 +30,7 @@ public class User implements Serializable{
* Is used to identify the user, should be unique and can't be modified
*/
@Id
+ @Column(name = "login")
private String login;
/**
* Password : used for authentication purpose only, is only writable
@@ -72,6 +74,7 @@ public class User implements Serializable{
}
@Id
+ @Column(name = "login")
public String getLogin() {
return login;
}
@@ -144,6 +147,7 @@ public class User implements Serializable{
/**
* @param login the login to set
*/
+ @Column(name = "login")
public void setLogin(String login) {
this.login = login;
}
diff --git a/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java b/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java
index a742d71..cc24d36 100644
--- a/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java
+++ b/YACOSCore/ejbModule/org/yacos/core/users/UserManagerBean.java
@@ -38,6 +38,7 @@ public class UserManagerBean implements IUserManager{
if (!this.exists(login)){
User user = new User(login, password, firstName, lastName, organization, email);
em.persist(user);
+ em.flush();
return user;
}
else{ throw new PKAlreadyUsedException(); }