From b19e6e154a4cdcd1fbe46275832fc83b0bda511f Mon Sep 17 00:00:00 2001 From: Christian Corsano Date: Mon, 14 Jan 2008 01:29:04 +0000 Subject: [PATCH] =?UTF-8?q?ChoosePreference=20r=C3=A9par=C3=A9=20!=20De=20?= =?UTF-8?q?gros=20probl=C3=A8mes=20avec=20HSQLDB,=20et=20la=20persistance?= =?UTF-8?q?=20en=20g=C3=A9n=C3=A9ral=20(principalement=20du=20aux=20IdClas?= =?UTF-8?q?s=20qu'on=20a=20ajout=C3=A9).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YACOSCore/ejbModule/META-INF/persistence.xml | 1 + .../core/article/ArticleManagerBean.java | 25 +++++--- .../yacos/core/article/IArticleManager.java | 4 +- .../org/yacos/core/article/Preference.java | 4 +- .../org/yacos/core/article/PreferencePK.java | 57 +++++++++++++------ .../org/yacos/core/users/RolePK.java | 47 ++++++++------- .../ejbModule/org/yacos/core/users/User.java | 4 ++ .../org/yacos/core/users/UserManagerBean.java | 1 + 8 files changed, 91 insertions(+), 52 deletions(-) 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(); }