Modified: incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java?rev=392618&r1=392617&r2=392618&view=diff ============================================================================== --- incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java (original) +++ incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateUserManagerImpl.java Sat Apr 8 15:36:25 2006 @@ -4,28 +4,30 @@ package org.roller.business.hibernate; import java.util.ArrayList; +import java.util.Date; import java.util.Iterator; import java.util.List; - +import java.util.Map; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.criterion.Expression; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.criterion.SimpleExpression; import org.roller.RollerException; -import org.roller.business.PersistenceStrategy; -import org.roller.business.UserManagerImpl; +import org.roller.config.RollerConfig; import org.roller.model.AutoPingManager; import org.roller.model.BookmarkManager; import org.roller.model.PingQueueManager; import org.roller.model.PingTargetManager; +import org.roller.model.Roller; import org.roller.model.RollerFactory; +import org.roller.model.UserManager; import org.roller.model.WeblogManager; +import org.roller.pojos.BookmarkData; import org.roller.pojos.FolderData; import org.roller.pojos.WeblogTemplate; import org.roller.pojos.PermissionsData; @@ -35,502 +37,902 @@ import org.roller.pojos.WeblogCategoryData; import org.roller.pojos.WeblogEntryData; import org.roller.pojos.WebsiteData; +import org.roller.util.Utilities; + /** - * Hibernate queries. - * @author David M Johnson + * Hibernate implementation of the UserManager. */ -public class HibernateUserManagerImpl extends UserManagerImpl -{ +public class HibernateUserManagerImpl implements UserManager { + static final long serialVersionUID = -5128460637997081121L; - private static Log mLogger = - LogFactory.getFactory().getInstance(HibernateUserManagerImpl.class); - - /** Doesn't seem to be any other way to get ignore case w/o QBE */ - class IgnoreCaseEqExpression extends SimpleExpression { - public IgnoreCaseEqExpression(String property, Object value) { - super(property, value, "=", true); - } - } + private static Log log = LogFactory.getLog(HibernateUserManagerImpl.class); + + private HibernatePersistenceStrategy strategy = null; + /** * @param strategy */ - public HibernateUserManagerImpl(PersistenceStrategy strategy) - { - super(strategy); - mLogger.debug("Instantiating User Manager"); + public HibernateUserManagerImpl(HibernatePersistenceStrategy strat) { + log.debug("Instantiating Hibernate User Manager"); + + this.strategy = strat; } - /** - * Get websites of a user + + /** + * @see org.roller.model.UserManager#storeWebsite(org.roller.pojos.WebsiteData) */ - public List getWebsites(UserData user, Boolean enabled, Boolean active) throws RollerException - { - try - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(WebsiteData.class); - if (user != null) - { - criteria.createAlias("permissions","permissions"); - criteria.add(Expression.eq("permissions.user", user)); - criteria.add(Expression.eq("permissions.pending", Boolean.FALSE)); + public void storeWebsite(WebsiteData data) throws RollerException { + this.strategy.storeAndCommit(data); + } + + + public void removeWebsite(String id) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + // load the weblog first + WebsiteData weblog = (WebsiteData) this.strategy.load(id, WebsiteData.class); + + // remove contents first, then remove website + this.removeWebsiteContents(weblog); + this.strategy.remove(weblog); + + // commit changes + this.strategy.getSession().getTransaction().commit(); + } catch (Exception ex) { + + try { + this.strategy.getSession().getTransaction().rollback(); + } catch(HibernateException he) { + log.error("Error doing rollback", he); } - if (enabled != null) - { - criteria.add(Expression.eq("enabled", enabled)); + + strategy.release(); + + throw new RollerException(ex); + } + } + + + public void removeWebsite(WebsiteData weblog) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + // remove contents first, then remove website + this.removeWebsiteContents(weblog); + this.strategy.remove(weblog); + + // commit changes + this.strategy.getSession().getTransaction().commit(); + } catch (Exception ex) { + + try { + this.strategy.getSession().getTransaction().rollback(); + } catch(HibernateException he) { + log.error("Error doing rollback", he); } - if (active != null) - { - criteria.add(Expression.eq("active", active)); + + strategy.release(); + + throw new RollerException(ex); + } + } + + + /** + * convenience method for removing contents of a weblog. + * + * TODO: we may be able to do this faster using Hibernate delete statements. + */ + private void removeWebsiteContents(WebsiteData website) + throws HibernateException, RollerException { + + Session session = this.strategy.getSession(); + + BookmarkManager bmgr = RollerFactory.getRoller().getBookmarkManager(); + WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager(); + +// // TODO: backend refactoring, tidy up ping removals +// // Remove the website's ping queue entries +// PingQueueManager pingQueueMgr = RollerFactory.getRoller().getPingQueueManager(); +// pingQueueMgr.removeQueueEntriesByWebsite(website); +// +// // Remove the website's custom ping targets +// PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager(); +// pingTargetMgr.removeCustomPingTargets(website); +// +// // Remove the website's auto ping configurations +// AutoPingManager autoPingMgr = RollerFactory.getRoller().getAutopingManager(); +// List autopings = autoPingMgr.getAutoPingsByWebsite(website); +// autoPingMgr.removeAutoPings(autopings); + +// // remove entries +// Criteria entryQuery = session.createCriteria(WeblogEntryData.class); +// entryQuery.add(Expression.eq("website", website)); +// List entries = entryQuery.list(); +// for (Iterator iter = entries.iterator(); iter.hasNext();) { +// WeblogEntryData entry = (WeblogEntryData) iter.next(); +// +// this.strategy.remove(entry); +// } +// +// // remove associated pages +// Criteria pageQuery = session.createCriteria(WeblogTemplate.class); +// pageQuery.add(Expression.eq("website", website)); +// List pages = pageQuery.list(); +// for (Iterator iter = pages.iterator(); iter.hasNext();) { +// WeblogTemplate page = (WeblogTemplate) iter.next(); +// this.strategy.remove(page); +// } +// +// // remove associated referers +// Criteria refererQuery = session.createCriteria(RefererData.class); +// refererQuery.add(Expression.eq("website", website)); +// List referers = refererQuery.list(); +// for (Iterator iter = referers.iterator(); iter.hasNext();) { +// RefererData referer = (RefererData) iter.next(); +// this.strategy.remove(referer); +// } + + // remove folders (including bookmarks) + FolderData rootFolder = bmgr.getRootFolder(website); + if (null != rootFolder) { + this.strategy.remove(rootFolder); + + // Still cannot get all Bookmarks cleared! + Iterator allFolders = bmgr.getAllFolders(website).iterator(); + while (allFolders.hasNext()) { + FolderData aFolder = (FolderData)allFolders.next(); + // TODO: backend refactoring, how do we do this? + bmgr.deleteFolderContents(aFolder); + this.strategy.remove(aFolder); } - return criteria.list(); } - catch (HibernateException e) - { - throw new RollerException(e); + + // remove categories + WeblogCategoryData rootCat = wmgr.getRootWeblogCategory(website); + if (null != rootCat) { + this.strategy.remove(rootCat); } + + } + + + public void storeUser(UserData data) throws RollerException { + this.strategy.storeAndCommit(data); } + + public void removeUser(UserData user) throws RollerException { + this.strategy.removeAndCommit(user); + } + + + public void removeUser(String id) throws RollerException { + this.strategy.removeAndCommit(id,UserData.class); + } + + + public void storePermissions(PermissionsData perms) throws RollerException { + this.strategy.storeAndCommit(perms); + } + + + public void removePermissions(PermissionsData perms) throws RollerException { + this.strategy.removeAndCommit(perms); + } + + /** - * Get users of a website + * @see org.roller.model.UserManager#storePage(org.roller.pojos.WeblogTemplate) */ - public List getUsers(WebsiteData website, Boolean enabled) - throws RollerException - { - try - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(UserData.class); - if (website != null) - { - criteria.createAlias("permissions","permissions"); - criteria.add(Expression.eq("permissions.website", website)); + public void storePage(WeblogTemplate data) throws RollerException { + this.strategy.storeAndCommit(data); + } + + + public void removePage(String id) throws RollerException { + this.strategy.removeAndCommit(id,WeblogTemplate.class); + } + + + // TODO: EOL this method, logic about safe pages goes outside the persistence layer + public void removePageSafely(String id) throws RollerException { + + // TODO: rewrite using page.isRequired() + WeblogTemplate pd = retrievePageReadOnly(id); + if (pd == null) return; + + WebsiteData wd = pd.getWebsite(); + if (pd.getId() == wd.getDefaultPageId()) { + log.error( + "Refusing to remove default page from website with handle: " + + wd.getHandle()); + throw new RollerException( + new IllegalArgumentException("Page is default page of website.")); + } + removePage(id); + } + + + /** + * TODO: EOL this method? doesn't seem to be used + */ + public String fixPageLink(WeblogTemplate data) throws RollerException { + String link = Utilities.removeHTML(data.getName()); + link = Utilities.removeNonAlphanumeric(link); + + data.setLink(link); + this.strategy.storeAndCommit(data); + + return link; + } + + + /** + * Add a new Roller user. + * + * TODO: do we really need this method? probably better if roles are added + * elsewhere and then we just use storeUser(). + */ + public void addUser(UserData ud) throws RollerException { + + if(getUser(ud.getUserName()) != null || + getUser(ud.getUserName().toLowerCase()) != null) { + throw new RollerException("error.add.user.userNameInUse"); + } + + // TODO: we must do this in a better fashion, like getUserCnt()? + boolean adminUser = false; + List users = this.getUsers(); + if (users.size() == 0) { + // Make first user an admin + adminUser = true; + } + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + // add user + this.strategy.store(ud); + + // and roles + RoleData editorRole = new RoleData(null, ud, "editor"); + this.strategy.store(editorRole); + + if (adminUser) { + RoleData adminRole = new RoleData(null, ud, "admin"); + this.strategy.store(adminRole); } - if (enabled != null) - { - criteria.add(Expression.eq("enabled", enabled)); + + // commit changes + this.strategy.getSession().getTransaction().commit(); + } catch (HibernateException ex) { + + try { + this.strategy.getSession().getTransaction().rollback(); + } catch(HibernateException he) { + log.error("Error doing rollback", he); } - return criteria.list(); + + strategy.release(); + + throw new RollerException(ex); } - catch (HibernateException e) - { - throw new RollerException(e); + + } + + + public void createWebsite(WebsiteData newWebsite) throws RollerException { + + UserManager umgr = RollerFactory.getRoller().getUserManager(); + WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager(); + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + // store the new weblog + this.strategy.store(newWebsite); + + // grant weblog creator ADMIN permissions + PermissionsData perms = new PermissionsData(); + perms.setUser(newWebsite.getCreator()); + perms.setWebsite(newWebsite); + perms.setPending(false); + perms.setPermissionMask(PermissionsData.ADMIN); + this.strategy.store(perms); + + // add default categories + WeblogCategoryData rootCat = wmgr.createWeblogCategory( + newWebsite, // newWebsite + null, // parent + "root", // name + "root", // description + null ); // image + this.strategy.store(rootCat); + + String cats = RollerConfig.getProperty("newuser.categories"); + if (cats != null) { + String[] splitcats = cats.split(","); + for (int i=0; i<splitcats.length; i++) { + WeblogCategoryData c = wmgr.createWeblogCategory( + newWebsite, // newWebsite + rootCat, // parent + splitcats[i], // name + splitcats[i], // description + null ); // image + this.strategy.store(c); + } + } + newWebsite.setBloggerCategory(rootCat); + newWebsite.setDefaultCategory(rootCat); + this.strategy.store(newWebsite); + + // add default bookmarks + BookmarkManager bmgr = RollerFactory.getRoller().getBookmarkManager(); + FolderData root = bmgr.createFolder( + null, "root", "root", newWebsite); + this.strategy.store(root); + + Integer zero = new Integer(0); + String blogroll = RollerConfig.getProperty("newuser.blogroll"); + if (blogroll != null) { + String[] splitroll = blogroll.split(","); + for (int i=0; i<splitroll.length; i++) { + String[] rollitems = splitroll[i].split("\\|"); + if (rollitems != null && rollitems.length > 1) { + BookmarkData b = bmgr.createBookmark( + root, // parent + rollitems[0], // name + "", // description + rollitems[1].trim(), // url + null, // feedurl + zero, // weight + zero, // priority + null); // image + this.strategy.store(b); + } + } + } + + // commit changes + this.strategy.getSession().getTransaction().commit(); + + } catch (HibernateException ex) { + + try { + this.strategy.getSession().getTransaction().rollback(); + } catch(HibernateException he) { + log.error("Error doing rollback", he); + } + + strategy.release(); + + throw new RollerException(ex); } } - /** - * Use Hibernate directly because Roller's Query API does too much allocation. + + /** + * The old createWebsite() method. */ - public WeblogTemplate getPageByLink(WebsiteData website, String pagelink) - throws RollerException - { - if (website == null) - throw new RollerException("userName is null"); - - if (pagelink == null) - throw new RollerException("Pagelink is null"); - - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(WeblogTemplate.class); - criteria.add(Expression.eq("website",website)); - criteria.add(Expression.eq("link",pagelink)); - criteria.setMaxResults(1); - try - { - List list = criteria.list(); - return list.size()!=0 ? (WeblogTemplate)list.get(0) : null; - } - catch (HibernateException e) - { - throw new RollerException(e); + public WebsiteData createWebsite(UserData user, Map pages, String handle, + String name, String description, + String email, String theme, String locale, + String timeZone) throws RollerException { + + WebsiteData website = new WebsiteData( + null, // id + name, // name + handle, // handle + description, // description + user, // userId + "dummy", // defaultPageId + "dummy", // weblogDayPageId + Boolean.TRUE, // enableBloggerApi + null, // bloggerCategory + null, // defaultCategory + "editor-text.jsp", // editorPage + "", // blacklist + Boolean.TRUE, // allowComments + Boolean.FALSE, // emailComments + "", // emailFromAddress + Boolean.TRUE, // isEnabled + email, // emailAddress + new Date(), // dateCreated + Boolean.TRUE, // defaultAllowComments + 0, // defaultCommentDays + Boolean.FALSE); // moderateComments + website.setEditorTheme(theme); + website.setLocale(locale); + website.setTimeZone(timeZone); + + this.createWebsite(website); + + return website; + } + + /** + * Creates and stores a pending PermissionsData for user and website specified. + * + * TODO: do we really need this? can't we just use storePermissions()? + */ + public PermissionsData inviteUser(WebsiteData website, + UserData user, short mask) throws RollerException { + + if (website == null) throw new RollerException("Website cannot be null"); + if (user == null) throw new RollerException("User cannot be null"); + + PermissionsData perms = new PermissionsData(); + perms.setWebsite(website); + perms.setUser(user); + perms.setPermissionMask(mask); + this.strategy.storeAndCommit(perms); + + return perms; + } + + + /** + * Remove user permissions from a website. + */ + public void retireUser(WebsiteData website, UserData user) throws RollerException { + + if (website == null) throw new RollerException("Website cannot be null"); + if (user == null) throw new RollerException("User cannot be null"); + + Iterator perms = website.getPermissions().iterator(); + PermissionsData target = null; + while (perms.hasNext()) { + PermissionsData pd = (PermissionsData)perms.next(); + if (pd.getUser().getId().equals(user.getId())) { + target = pd; + break; + } } + if (target == null) throw new RollerException("User not member of website"); + + website.removePermission(target); + this.strategy.removeAndCommit(target); } - - /** + + + public WebsiteData retrieveWebsite(String id) throws RollerException { + return (WebsiteData)this.strategy.load(id,WebsiteData.class); + } + + + public WebsiteData getWebsiteByHandle(String handle) throws RollerException { + return getWebsiteByHandle(handle, Boolean.TRUE); + } + + + /** * Return website specified by handle. */ public WebsiteData getWebsiteByHandle(String handle, Boolean enabled) - throws RollerException - { + throws RollerException { + if (handle==null ) throw new RollerException("Handle cannot be null"); - - try - { - Session session = ((HibernateStrategy)mStrategy).getSession(); + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); Criteria criteria = session.createCriteria(WebsiteData.class); - if (enabled != null) - { + if (enabled != null) { criteria.add( - Expression.conjunction() - .add(new IgnoreCaseEqExpression("handle", handle)) - .add(Expression.eq("enabled", enabled))); - } - else - { + Expression.conjunction() + .add(new IgnoreCaseEqExpression("handle", handle)) + .add(Expression.eq("enabled", enabled))); + } else { criteria.add( - Expression.conjunction() + Expression.conjunction() .add(Expression.eq("handle", handle))); - } + } WebsiteData website = (WebsiteData)criteria.uniqueResult(); return website; + } catch (HibernateException e) { + throw new RollerException(e); } - catch (HibernateException e) - { + } + + + /** + * Get websites of a user + */ + public List getWebsites(UserData user, Boolean enabled, Boolean active) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(WebsiteData.class); + if (user != null) { + criteria.createAlias("permissions","permissions"); + criteria.add(Expression.eq("permissions.user", user)); + criteria.add(Expression.eq("permissions.pending", Boolean.FALSE)); + } + if (enabled != null) { + criteria.add(Expression.eq("enabled", enabled)); + } + if (active != null) { + criteria.add(Expression.eq("active", active)); + } + return criteria.list(); + } catch (HibernateException e) { throw new RollerException(e); } } - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - public UserData getUser(String userName, Boolean enabled) - throws RollerException - { + + public UserData retrieveUser(String id) throws RollerException { + return (UserData)this.strategy.load(id,UserData.class); + } + + + public UserData getUser(String userName) throws RollerException { + return getUser(userName, Boolean.TRUE); + } + + + public UserData getUser(String userName, Boolean enabled) + throws RollerException { + if (userName==null ) throw new RollerException("userName cannot be null"); - - try - { - Session session = ((HibernateStrategy)mStrategy).getSession(); + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); Criteria criteria = session.createCriteria(UserData.class); - if (enabled != null) - { + if (enabled != null) { criteria.add( - Expression.conjunction() - .add(Expression.eq("userName", userName)) - .add(Expression.eq("enabled", enabled))); - } - else - { + Expression.conjunction() + .add(Expression.eq("userName", userName)) + .add(Expression.eq("enabled", enabled))); + } else { criteria.add( - Expression.conjunction() + Expression.conjunction() .add(Expression.eq("userName", userName))); - } + } return (UserData)criteria.uniqueResult(); + } catch (HibernateException e) { + throw new RollerException(e); } - catch (HibernateException e) - { + } + + + public List getUsers() throws RollerException { + return getUsers(Boolean.TRUE); + } + + + public List getUsers(Boolean enabled) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(UserData.class); + if (enabled != null) { + criteria.add(Expression.eq("enabled", enabled)); + } + + return criteria.list(); + } catch (HibernateException e) { throw new RollerException(e); } } - //------------------------------------------------------------------------ - /** - * @see org.roller.model.UserManager#getPages(WebsiteData) + + /** + * Get users of a website */ - public List getPages(WebsiteData website) throws RollerException - { - if (website == null) - throw new RollerException("website is null"); - - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(WeblogTemplate.class); - criteria.add(Expression.eq("website",website)); - criteria.addOrder(Order.asc("name")); - try - { + public List getUsers(WebsiteData website, Boolean enabled) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(UserData.class); + if (website != null) { + criteria.createAlias("permissions","permissions"); + criteria.add(Expression.eq("permissions.website", website)); + } + if (enabled != null) { + criteria.add(Expression.eq("enabled", enabled)); + } return criteria.list(); + } catch (HibernateException e) { + throw new RollerException(e); } - catch (HibernateException e) - { + } + + + public List getUsersStartingWith(String startsWith, + int offset, int length, Boolean enabled) throws RollerException { + + List rawresults = new ArrayList(); + List results = new ArrayList(); + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(UserData.class); + + if (enabled != null) { + criteria.add(Expression.eq("enabled", enabled)); + } + if (startsWith != null) { + criteria.add(Expression.disjunction() + .add(Expression.like("userName", startsWith, MatchMode.START)) + .add(Expression.like("emailAddress", startsWith, MatchMode.START))); + } + + rawresults = criteria.list(); + } catch (HibernateException e) { throw new RollerException(e); } + int pos = 0; + int count = 0; + Iterator iter = rawresults.iterator(); + while (iter.hasNext() && count < length) { + UserData user = (UserData)iter.next(); + if (pos++ >= offset) { + results.add(user); + count++; + } + } + return results; } - /** - * @see org.roller.model.UserManager#getPageByName(WebsiteData, java.lang.String) + + public WeblogTemplate retrievePage(String id) throws RollerException { + // Don't hit database for templates stored on disk + if (id != null && id.endsWith(".vm")) return null; + + return (WeblogTemplate)this.strategy.load(id,WeblogTemplate.class); + } + + + /** + * @see org.roller.model.UserManager#retrievePage(java.lang.String) + * + * TODO: EOL this method, it is useless + */ + public WeblogTemplate retrievePageReadOnly(String id) throws RollerException { + // Don't hit database for templates stored on disk + if (id != null && id.endsWith(".vm")) return null; + + // Hibernate has a read-only flag: LockMode.READ + return (WeblogTemplate)this.strategy.load(id,WeblogTemplate.class); + } + + + /** + * Use Hibernate directly because Roller's Query API does too much allocation. */ - public WeblogTemplate getPageByName(WebsiteData website, String pagename) - throws RollerException - { + public WeblogTemplate getPageByLink(WebsiteData website, String pagelink) + throws RollerException { + if (website == null) - throw new RollerException("website is null"); - - if (pagename == null) - throw new RollerException("Page name is null"); - - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(WeblogTemplate.class); - criteria.add(Expression.eq("website", website)); - criteria.add(Expression.eq("name", pagename)); - criteria.setMaxResults(1); - try - { + throw new RollerException("userName is null"); + + if (pagelink == null) + throw new RollerException("Pagelink is null"); + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(WeblogTemplate.class); + criteria.add(Expression.eq("website",website)); + criteria.add(Expression.eq("link",pagelink)); + criteria.setMaxResults(1); + List list = criteria.list(); return list.size()!=0 ? (WeblogTemplate)list.get(0) : null; - } - catch (HibernateException e) - { + } catch (HibernateException e) { throw new RollerException(e); } } - /* - * @see org.roller.business.UserManagerBase#getRoles(org.roller.pojos.UserData) + + /** + * @see org.roller.model.UserManager#getPageByName(WebsiteData, java.lang.String) */ - public List getUserRoles(UserData user) throws RollerException - { + public WeblogTemplate getPageByName(WebsiteData website, String pagename) + throws RollerException { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(RoleData.class); - criteria.add(Expression.eq("user", user)); - try - { - return criteria.list(); - } - catch (HibernateException e) - { - throw new RollerException(e); - } - } - - public List getUsers(Boolean enabled) throws RollerException - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(UserData.class); - if (enabled != null) - { - criteria.add(Expression.eq("enabled", enabled)); - } - try - { - return criteria.list(); - } - catch (HibernateException e) - { + if (website == null) + throw new RollerException("website is null"); + + if (pagename == null) + throw new RollerException("Page name is null"); + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(WeblogTemplate.class); + criteria.add(Expression.eq("website", website)); + criteria.add(Expression.eq("name", pagename)); + criteria.setMaxResults(1); + + List list = criteria.list(); + return list.size()!=0? (WeblogTemplate)list.get(0) : null; + } catch (HibernateException e) { throw new RollerException(e); } } - - /** - * @see org.roller.model.UserManager#removeWebsiteContents(org.roller.pojos.WebsiteData) + + + /** + * @see org.roller.model.UserManager#getPages(WebsiteData) */ - public void removeWebsiteContents(WebsiteData website) - throws RollerException - { - try - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - - //UserManager umgr = RollerFactory.getRoller().getUserManager(); - BookmarkManager bmgr = RollerFactory.getRoller().getBookmarkManager(); - WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager(); + public List getPages(WebsiteData website) throws RollerException { + + if (website == null) + throw new RollerException("website is null"); + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); - // remove entries - Criteria entryQuery = session.createCriteria(WeblogEntryData.class); - entryQuery.add(Expression.eq("website", website)); - List entries = entryQuery.list(); - for (Iterator iter = entries.iterator(); iter.hasNext();) - { - WeblogEntryData entry = (WeblogEntryData) iter.next(); - System.out.println("Removing entry: " + entry.getId()); - entry.remove(); - } - - // remove folders (takes bookmarks with it) - FolderData rootFolder = bmgr.getRootFolder(website); - if (null != rootFolder) - { - rootFolder.remove(); - // Still cannot get all Bookmarks cleared! - Iterator allFolders = bmgr.getAllFolders(website).iterator(); - while (allFolders.hasNext()) - { - FolderData aFolder = (FolderData)allFolders.next(); - bmgr.deleteFolderContents(aFolder); - aFolder.remove(); - } - } - - // remove associated pages - Criteria pageQuery = session.createCriteria(WeblogTemplate.class); - pageQuery.add(Expression.eq("website", website)); - List pages = pageQuery.list(); - for (Iterator iter = pages.iterator(); iter.hasNext();) - { - WeblogTemplate page = (WeblogTemplate) iter.next(); - page.remove(); - } - - // remove associated referers - Criteria refererQuery = session.createCriteria(RefererData.class); - refererQuery.add(Expression.eq("website", website)); - List referers = refererQuery.list(); - for (Iterator iter = referers.iterator(); iter.hasNext();) - { - RefererData referer = (RefererData) iter.next(); - referer.remove(); - } - - // remove categories - WeblogCategoryData rootCat = wmgr.getRootWeblogCategory(website); - if (null != rootCat) - { - rootCat.remove(); -// Iterator it = wmgr.getWeblogCategories(website).iterator(); -// while (it.hasNext()) -// { -// ((WeblogCategoryData)it.next()).remove(); -// } - } - - // Remove the website's ping queue entries - PingQueueManager pingQueueMgr = RollerFactory.getRoller().getPingQueueManager(); - pingQueueMgr.removeQueueEntriesByWebsite(website); - - // Remove the website's custom ping targets - PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager(); - pingTargetMgr.removeCustomPingTargets(website); - - // Remove the website's auto ping configurations - AutoPingManager autoPingMgr = RollerFactory.getRoller().getAutopingManager(); - List autopings = autoPingMgr.getAutoPingsByWebsite(website); - autoPingMgr.removeAutoPings(autopings); - - } - catch (HibernateException e) - { + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(WeblogTemplate.class); + criteria.add(Expression.eq("website",website)); + criteria.addOrder(Order.asc("name")); + + return criteria.list(); + } catch (HibernateException e) { throw new RollerException(e); } } - + + + public PermissionsData retrievePermissions(String inviteId) throws RollerException { + return (PermissionsData)this.strategy.load(inviteId, PermissionsData.class); + } + + /** * Return permissions for specified user in website */ public PermissionsData getPermissions( - WebsiteData website, UserData user) throws RollerException - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(PermissionsData.class); - criteria.add(Expression.eq("website", website)); - criteria.add(Expression.eq("user", user)); - try - { + WebsiteData website, UserData user) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(PermissionsData.class); + criteria.add(Expression.eq("website", website)); + criteria.add(Expression.eq("user", user)); + List list = criteria.list(); return list.size()!=0 ? (PermissionsData)list.get(0) : null; - } - catch (HibernateException e) - { + } catch (HibernateException e) { throw new RollerException(e); } } - /** + + /** * Get pending permissions for user */ - public List getPendingPermissions(UserData user) throws RollerException - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(PermissionsData.class); - criteria.add(Expression.eq("user", user)); - criteria.add(Expression.eq("pending", Boolean.TRUE)); - try - { + public List getPendingPermissions(UserData user) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(PermissionsData.class); + criteria.add(Expression.eq("user", user)); + criteria.add(Expression.eq("pending", Boolean.TRUE)); + return criteria.list(); - } - catch (HibernateException e) - { + } catch (HibernateException e) { throw new RollerException(e); } } - /** + + /** * Get pending permissions for website */ - public List getPendingPermissions(WebsiteData website) throws RollerException - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(PermissionsData.class); - criteria.add(Expression.eq("website", website)); - criteria.add(Expression.eq("pending", Boolean.TRUE)); - try - { + public List getPendingPermissions(WebsiteData website) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(PermissionsData.class); + criteria.add(Expression.eq("website", website)); + criteria.add(Expression.eq("pending", Boolean.TRUE)); + return criteria.list(); - } - catch (HibernateException e) - { + } catch (HibernateException e) { throw new RollerException(e); } } - + + /** * Get all permissions of a website (pendings not including) */ - public List getAllPermissions(WebsiteData website) throws RollerException - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(PermissionsData.class); - criteria.add(Expression.eq("website", website)); - criteria.add(Expression.eq("pending", Boolean.FALSE)); - try - { + public List getAllPermissions(WebsiteData website) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(PermissionsData.class); + criteria.add(Expression.eq("website", website)); + criteria.add(Expression.eq("pending", Boolean.FALSE)); + return criteria.list(); - } - catch (HibernateException e) - { + } catch (HibernateException e) { throw new RollerException(e); } } - + + /** * Get all permissions of a user. */ - public List getAllPermissions(UserData user) throws RollerException - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(PermissionsData.class); - criteria.add(Expression.eq("user", user)); - criteria.add(Expression.eq("pending", Boolean.FALSE)); - try - { + public List getAllPermissions(UserData user) throws RollerException { + + try { + // begin transaction + this.strategy.getSession().beginTransaction(); + + Session session = ((HibernatePersistenceStrategy)this.strategy).getSession(); + Criteria criteria = session.createCriteria(PermissionsData.class); + criteria.add(Expression.eq("user", user)); + criteria.add(Expression.eq("pending", Boolean.FALSE)); + return criteria.list(); - } - catch (HibernateException e) - { + } catch (HibernateException e) { throw new RollerException(e); } } - - public List getUsersStartingWith(String startsWith, - int offset, int length, Boolean enabled) throws RollerException - { - Session session = ((HibernateStrategy)mStrategy).getSession(); - Criteria criteria = session.createCriteria(UserData.class); - List rawresults = new ArrayList(); - List results = new ArrayList(); - if (enabled != null) - { - criteria.add(Expression.eq("enabled", enabled)); - } - if (startsWith != null) - { - criteria.add(Expression.disjunction() - .add(Expression.like("userName", startsWith, MatchMode.START)) - .add(Expression.like("emailAddress", startsWith, MatchMode.START))); - } - try - { - rawresults = criteria.list(); - } - catch (HibernateException e) - { - throw new RollerException(e); - } - int pos = 0; - int count = 0; - Iterator iter = rawresults.iterator(); - while (iter.hasNext() && count < length) - { - UserData user = (UserData)iter.next(); - if (pos++ >= offset) - { - results.add(user); - count++; - } + + + public void release() {} + + + /** Doesn't seem to be any other way to get ignore case w/o QBE */ + class IgnoreCaseEqExpression extends SimpleExpression { + public IgnoreCaseEqExpression(String property, Object value) { + super(property, value, "=", true); } - return results; } + }
