diff options
Diffstat (limited to 'orkbasej/java/net/sf/oreka/srvc')
4 files changed, 225 insertions, 1 deletions
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<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; + } } |