diff options
author | Henri Herscher <henri@oreka.org> | 2006-01-03 21:21:24 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2006-01-03 21:21:24 +0000 |
commit | f28ce4161078c289e5eb0fb769c18fa9dce06cbc (patch) | |
tree | e0f9beb96513a1d1cfa1de536bdca525c544b2fe /orkbasej/java/net/sf/oreka/srvc/UserServiceHbn.java | |
parent | a794bcdd80379335848a546035f767bb7e924550 (diff) |
Worked on LoginStrings
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@115 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkbasej/java/net/sf/oreka/srvc/UserServiceHbn.java')
-rw-r--r-- | orkbasej/java/net/sf/oreka/srvc/UserServiceHbn.java | 149 |
1 files changed, 148 insertions, 1 deletions
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<String> oldLoginStrings = new HashSet<String>(); + HashSet<String> newLoginStrings = new HashSet<String>(); + HashMap<String, LoginString> loginStringMap = new HashMap<String, LoginString>(); + + 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<loginStrings.length; i++) { + newLoginStrings.add(loginStrings[i]); + + // see if the login string exists for another user + String queryString = new String("from LoginString as ls where ls.loginString=:loginString"); + Query query = hbnSession.createQuery(queryString); + query.setString("loginString", loginStrings[i]); + List list = query.list(); + LoginString ls = null; + + if(list.size() > 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; + } } |