From f28ce4161078c289e5eb0fb769c18fa9dce06cbc Mon Sep 17 00:00:00 2001 From: Henri Herscher Date: Tue, 3 Jan 2006 21:21:24 +0000 Subject: Worked on LoginStrings git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@115 09dcff7a-b715-0410-9601-b79a96267cd0 --- orkbasej/.classpath | 1 + orkbasej/java/net/sf/oreka/bo/UserBo.java | 25 ++-- .../java/net/sf/oreka/persistent/LoginString.java | 19 ++- orkbasej/java/net/sf/oreka/persistent/User.java | 28 ++-- orkbasej/java/net/sf/oreka/srvc/ObjectService.java | 7 + .../java/net/sf/oreka/srvc/ObjectServiceHbn.java | 67 +++++++++ orkbasej/java/net/sf/oreka/srvc/UserService.java | 3 + .../java/net/sf/oreka/srvc/UserServiceHbn.java | 149 ++++++++++++++++++++- .../java/net/sf/oreka/test/FillDatabaseUser.java | 6 +- 9 files changed, 273 insertions(+), 32 deletions(-) create mode 100644 orkbasej/java/net/sf/oreka/srvc/ObjectService.java create mode 100644 orkbasej/java/net/sf/oreka/srvc/ObjectServiceHbn.java (limited to 'orkbasej') diff --git a/orkbasej/.classpath b/orkbasej/.classpath index 2c1efe8..6245939 100644 --- a/orkbasej/.classpath +++ b/orkbasej/.classpath @@ -7,5 +7,6 @@ + diff --git a/orkbasej/java/net/sf/oreka/bo/UserBo.java b/orkbasej/java/net/sf/oreka/bo/UserBo.java index 7824b00..f5ef2ea 100644 --- a/orkbasej/java/net/sf/oreka/bo/UserBo.java +++ b/orkbasej/java/net/sf/oreka/bo/UserBo.java @@ -44,17 +44,22 @@ public class UserBo implements Serializable { this.user = user; } - public String getLoginStringsCsv() { +// public String getLoginStringsCsv() { +// +// String loginStringsCsv = ""; +// Iterator it = user.getLoginStrings().iterator(); +// if(it.hasNext()) { +// loginStringsCsv = ((LoginString)it.next()).getLoginString(); +// } +// while(it.hasNext()) { +// loginStringsCsv += ", " + ((LoginString)it.next()).getLoginString(); +// } +// return loginStringsCsv; +// } - String loginStringsCsv = ""; - Iterator it = user.getLoginStrings().iterator(); - if(it.hasNext()) { - loginStringsCsv = ((LoginString)it.next()).getLoginString(); - } - while(it.hasNext()) { - loginStringsCsv += ", " + ((LoginString)it.next()).getLoginString(); - } - return loginStringsCsv; + public void setLoginStringsCsv() { + + } } diff --git a/orkbasej/java/net/sf/oreka/persistent/LoginString.java b/orkbasej/java/net/sf/oreka/persistent/LoginString.java index d3dc932..b8f092e 100644 --- a/orkbasej/java/net/sf/oreka/persistent/LoginString.java +++ b/orkbasej/java/net/sf/oreka/persistent/LoginString.java @@ -106,11 +106,20 @@ public class LoginString implements Serializable { this.user = user; } - public void bidirSetUser(User user) { - this.user = user; - user.getLoginStrings().add(this); - } - +// public void bidirSetUser(User user) { +// this.user = user; +// if(user != null) { +// user.getLoginStrings().add(this); +// } +// } +// +// public void bidirRemoveUser(User user) { +// this.user = null; +// if(user != null) { +// user.getLoginStrings().remove(this); +// } +// } + /** * */ diff --git a/orkbasej/java/net/sf/oreka/persistent/User.java b/orkbasej/java/net/sf/oreka/persistent/User.java index 04ffc42..26cf656 100644 --- a/orkbasej/java/net/sf/oreka/persistent/User.java +++ b/orkbasej/java/net/sf/oreka/persistent/User.java @@ -44,7 +44,7 @@ public class User implements Serializable { private Date dateDisabled = new Date(0); private Date dateDeleted = new Date(0); - private Set loginStrings; + //private Set loginStrings; /** * @hibernate.property @@ -142,19 +142,19 @@ public class User implements Serializable { * */ public User() { - loginStrings = new HashSet(); - } - - @OneToMany(fetch = FetchType.EAGER) - public Set getLoginStrings() { - return loginStrings; - } - - - - public void setLoginStrings(Set loginStrings) { - this.loginStrings = loginStrings; - } + //loginStrings = new HashSet(); + } + +// @OneToMany(fetch = FetchType.EAGER) +// public Set getLoginStrings() { +// return loginStrings; +// } +// +// +// +// public void setLoginStrings(Set loginStrings) { +// this.loginStrings = loginStrings; +// } public Date getDateCreated() { diff --git a/orkbasej/java/net/sf/oreka/srvc/ObjectService.java b/orkbasej/java/net/sf/oreka/srvc/ObjectService.java new file mode 100644 index 0000000..a15f323 --- /dev/null +++ b/orkbasej/java/net/sf/oreka/srvc/ObjectService.java @@ -0,0 +1,7 @@ +package net.sf.oreka.srvc; + +public interface ObjectService { + + public void saveObject(Object obj); + public Object getObjectById(java.lang.Class cl, int id); +} diff --git a/orkbasej/java/net/sf/oreka/srvc/ObjectServiceHbn.java b/orkbasej/java/net/sf/oreka/srvc/ObjectServiceHbn.java new file mode 100644 index 0000000..d23bc30 --- /dev/null +++ b/orkbasej/java/net/sf/oreka/srvc/ObjectServiceHbn.java @@ -0,0 +1,67 @@ +package net.sf.oreka.srvc; + +import net.sf.oreka.HibernateManager; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.hibernate.Transaction; + +public class ObjectServiceHbn implements ObjectService { + + static Logger logger = Logger.getLogger(ObjectServiceHbn.class); + + public Object getObjectById(java.lang.Class cl, int id) { + + Session hbnSession = null; + Object obj = null; + + logger.debug("Retrieving " + cl.getName() + " object with id:" + id); + + try + { + hbnSession = HibernateManager.instance().getSession(); + obj = hbnSession.get(cl, id); + } + catch ( HibernateException he ) { + logger.error("getObjectById: exception:" + he.getClass().getName()); + } + catch (Exception e) + { + logger.error("getObjectById: exception:", e); + } + finally { + if(hbnSession != null) {hbnSession.close();} + } + return obj; + } + + public void saveObject(Object obj) { + + Session hbnSession = null; + Transaction tx = null; + + logger.debug("Saving " + obj.getClass().getName()); + + try + { + hbnSession = HibernateManager.instance().getSession(); + tx = hbnSession.beginTransaction(); + hbnSession.saveOrUpdate(obj); // was merge + tx.commit(); + } + catch ( HibernateException he ) { + logger.log(Level.ERROR, he.toString()); + he.printStackTrace(); + } + catch (Exception e) + { + logger.error(e); + e.printStackTrace(); + } + finally { + if(hbnSession != null) {hbnSession.close();} + } + } +} diff --git a/orkbasej/java/net/sf/oreka/srvc/UserService.java b/orkbasej/java/net/sf/oreka/srvc/UserService.java index 95e6e37..39e71c7 100644 --- a/orkbasej/java/net/sf/oreka/srvc/UserService.java +++ b/orkbasej/java/net/sf/oreka/srvc/UserService.java @@ -14,4 +14,7 @@ public interface UserService { public void deleteUser(int userId); public void disableUser(int userId); + + public String getUserLoginStrings(int userId); + public void setUserLoginStrings(int userId, String loginStringsCsv); } diff --git a/orkbasej/java/net/sf/oreka/srvc/UserServiceHbn.java b/orkbasej/java/net/sf/oreka/srvc/UserServiceHbn.java index f33f243..069f1d3 100644 --- a/orkbasej/java/net/sf/oreka/srvc/UserServiceHbn.java +++ b/orkbasej/java/net/sf/oreka/srvc/UserServiceHbn.java @@ -1,16 +1,20 @@ package net.sf.oreka.srvc; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.List; import net.sf.oreka.HibernateManager; import net.sf.oreka.OrkBase; +import net.sf.oreka.OrkException; import net.sf.oreka.bo.UserBo; +import net.sf.oreka.persistent.LoginString; import net.sf.oreka.persistent.User; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; -import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.ScrollableResults; @@ -242,4 +246,147 @@ public class UserServiceHbn implements UserService { if(hbnSession != null) {hbnSession.close();} } } + + public void setUserLoginStrings(int userId, String loginStringsCsv) { + + if(loginStringsCsv == null) { + loginStringsCsv = ""; + } + logger.debug("Entering setUserLoginStrings; userId:" + userId + " loginStringsCsv:" + loginStringsCsv); + + HashSet oldLoginStrings = new HashSet(); + HashSet newLoginStrings = new HashSet(); + HashMap loginStringMap = new HashMap(); + + Session hbnSession = null; + Transaction tx = null; + + try + { + hbnSession = HibernateManager.instance().getSession(); + tx = hbnSession.beginTransaction(); + + // 1. extract all new login strings from CSV + String[] loginStrings = StringUtils.split(loginStringsCsv, ", "); + for(int i=0; i 0) { + ls = (LoginString)list.get(0); + if(ls != null) { + if(ls.getUser() != null) { + if(ls.getUser().getId() != userId && !ls.getUser().isDeleted()) { + throw new OrkException("Login String:" + loginStrings[i] + " belongs to userid:" + ls.getUser().getId()); + } + } + } + + } + // Create a new login string if it does not exist yet in the DB + if(ls == null) { + ls = new LoginString(); + ls.setLoginString(loginStrings[i]); + hbnSession.save(ls); + } + loginStringMap.put(loginStrings[i], ls); + } + + // 2. get the user and extract all old login strings + User user = (User)hbnSession.get(User.class, userId); + if(user == null) { + throw new OrkException("UserId:" + userId + " does not exist"); + } + String queryString = new String("from LoginString as ls where ls.user=:user"); + Query query = hbnSession.createQuery(queryString); + query.setEntity("user", user); + List list = query.list(); + Iterator it = list.iterator(); + while(it.hasNext()) { + LoginString ls = (LoginString)it.next(); + oldLoginStrings.add(ls.getLoginString()); + loginStringMap.put(ls.getLoginString(), ls); + } + + // Add all new login strings to the user + it = newLoginStrings.iterator(); + while(it.hasNext()) { + String ls = (String)it.next(); + if(oldLoginStrings.contains(ls) == false) { + LoginString lso = loginStringMap.get(ls); + lso.setUser(user); + logger.debug("Added loginstring:" + lso.getLoginString() + " to user:" + user.getFirstname()); + } + } + + // Remove all old login strings from the user + it = oldLoginStrings.iterator(); + while(it.hasNext()) { + String ls = (String)it.next(); + if(newLoginStrings.contains(ls) == false) { + LoginString lso = loginStringMap.get(ls); + lso.setUser(null); + logger.debug("Removed loginstring:" + lso.getLoginString() + " from user:" + user.getFirstname()); + } + } + + tx.commit(); + } + catch ( HibernateException he ) { + logger.error("setUserLoginStrings: exception:" + he.getClass().getName()); + } + catch ( OrkException oe ) { + logger.error("OrkException:" + oe.getMessage()); + } + catch (Exception e) + { + logger.error("setUserLoginStrings: exception:", e); + } + finally { + if(hbnSession != null) {hbnSession.close();} + } + } + + + public String getUserLoginStrings(int userId) { + + Session hbnSession = null; + User user = null; + String loginStringsCsv = ""; + + try + { + hbnSession = HibernateManager.instance().getSession(); + user = (User)hbnSession.get(User.class, userId); + String queryString = new String("from LoginString as ls where ls.user=:user"); + Query query = hbnSession.createQuery(queryString); + query.setEntity("user", user); + List list = query.list(); + + Iterator it = list.iterator(); + if(it.hasNext()) { + loginStringsCsv = ((LoginString)it.next()).getLoginString(); + } + while(it.hasNext()) { + loginStringsCsv += ", " + ((LoginString)it.next()).getLoginString(); + } + } + catch ( HibernateException he ) { + logger.error("getUserLoginStrings: exception:" + he.getClass().getName()); + } + catch (Exception e) + { + logger.error("getUserLoginStrings: exception:", e); + } + finally { + if(hbnSession != null) {hbnSession.close();} + } + return loginStringsCsv; + } } diff --git a/orkbasej/java/net/sf/oreka/test/FillDatabaseUser.java b/orkbasej/java/net/sf/oreka/test/FillDatabaseUser.java index b3cdbc5..6942312 100644 --- a/orkbasej/java/net/sf/oreka/test/FillDatabaseUser.java +++ b/orkbasej/java/net/sf/oreka/test/FillDatabaseUser.java @@ -36,12 +36,14 @@ public class FillDatabaseUser { LoginString ls = new LoginString(); ls.setLoginString("ls" + i); - ls.bidirSetUser(user); + //ls.bidirSetUser(user); + ls.setUser(user); hbnSession.save(ls); LoginString ls2 = new LoginString(); ls2.setLoginString("ls2" + i); - ls2.bidirSetUser(user); + //ls2.bidirSetUser(user); + ls2.setUser(user); hbnSession.save(ls2); } -- cgit v1.2.3