You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/10/21 23:46:28 UTC
svn commit: r327589 [20/72] - in /incubator/roller/branches/roller_1.x: ./
contrib/ contrib/lib/ contrib/plugins/ contrib/plugins/src/
contrib/plugins/src/org/ contrib/plugins/src/org/roller/
contrib/plugins/src/org/roller/presentation/ contrib/plugins...
Added: incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRefererManagerImpl.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,594 @@
+/*
+ * Created on Feb 23, 2003
+ */
+package org.roller.business.hibernate;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import net.sf.hibernate.Criteria;
+import net.sf.hibernate.Hibernate;
+import net.sf.hibernate.HibernateException;
+import net.sf.hibernate.Session;
+import net.sf.hibernate.expression.Expression;
+import net.sf.hibernate.expression.Junction;
+import net.sf.hibernate.expression.Order;
+import net.sf.hibernate.type.Type;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.RollerException;
+import org.roller.business.PersistenceStrategy;
+import org.roller.business.RefererManagerImpl;
+import org.roller.config.RollerRuntimeConfig;
+import org.roller.model.RefererManager;
+import org.roller.pojos.RefererData;
+import org.roller.pojos.WebsiteData;
+import org.roller.pojos.WebsiteDisplayData;
+
+
+/**
+ * Hibernate queries.
+ * @author David M Johnson
+ */
+public class HibernateRefererManagerImpl extends RefererManagerImpl
+ implements RefererManager
+{
+ static final long serialVersionUID = -4966091850482256435L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(HibernateRefererManagerImpl.class);
+
+ //-------------------------------------------------- Startup and Shutdown
+ public HibernateRefererManagerImpl(PersistenceStrategy support)
+ throws RollerException
+ {
+ super();
+ mStrategy = (HibernateStrategy)support;
+ mLogger.debug("Instantiating Referer Manager");
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Apply ignoreWord/spam filters to all referers in system.
+ */
+ public void applyRefererFilters() throws RollerException
+ {
+ try
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+
+ String spamwords = RollerRuntimeConfig.getProperty("spam.referers.ignorewords");
+
+ String[] ignoreWords = StringUtils.split(
+ StringUtils.deleteWhitespace(spamwords),",");
+ Junction or = Expression.disjunction();
+ for (int i=0; i<ignoreWords.length; i++)
+ {
+ String ignoreWord = ignoreWords[i].trim();
+ or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
+ }
+ criteria.add(Expression.conjunction()
+ .add(Expression.isNull("excerpt"))
+ .add(or)
+ );
+
+ Iterator referers = criteria.list().iterator();
+ while (referers.hasNext())
+ {
+ removeReferer( ((RefererData)referers.next()).getId() );
+ }
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ /**
+ * Apply ignoreWord/spam filters to all referers in website.
+ */
+ public void applyRefererFilters(WebsiteData website) throws RollerException
+ {
+ if (null == website) throw new RollerException("website is null");
+ if (null == website.getIgnoreWords()) return;
+
+ try
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+
+ String[] ignoreWords = StringUtils.split(
+ StringUtils.deleteWhitespace(website.getIgnoreWords()),",");
+ if (ignoreWords.length == 0) return;
+
+ Junction or = Expression.disjunction();
+ for (int i=0; i<ignoreWords.length; i++)
+ {
+ String ignoreWord = ignoreWords[i].trim();
+ or.add(Expression.ilike("refererUrl","%"+ignoreWord+"%"));
+ }
+ criteria.add(Expression.conjunction()
+ .add(Expression.isNull("excerpt"))
+ .add(Expression.eq("website",website))
+ .add(or)
+ );
+
+ Iterator referers = criteria.list().iterator();
+ while (referers.hasNext())
+ {
+ removeReferer( ((RefererData)referers.next()).getId() );
+ }
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * Use Hibernate directly because Roller's Query API does too much allocation.
+ */
+ protected List getExistingReferers(WebsiteData website, String dateString,
+ String permalink) throws RollerException
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.conjunction()
+ .add(Expression.eq("website",website))
+ .add(Expression.eq("dateString",dateString))
+ .add(Expression.eq("refererPermalink",permalink)));
+ try
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * Use Hibernate directly because Roller's Query API does too much allocation.
+ */
+ protected List getMatchingReferers(WebsiteData website, String requestUrl,
+ String refererUrl) throws RollerException
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.conjunction()
+ .add(Expression.eq("website",website))
+ .add(Expression.eq("requestUrl",requestUrl))
+ .add(Expression.eq("refererUrl",refererUrl)));
+ try
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * Use raw SQL because Hibernate can't handle sorting by sum.
+ */
+ public List getDaysPopularWebsites(int max) throws RollerException
+ {
+ // TODO Hibernate version of getDaysPopularWebsites
+ // TODO Move to full use of mSupport
+ String msg = "Getting popular websites";
+ Session ses = null; // the session will eventually be release by RequestFilter
+ Connection con = null;
+ try
+ {
+ List list = new ArrayList();
+
+ ses = ((HibernateStrategy)mStrategy).getSession();
+ con = ses.connection();
+
+ final PreparedStatement stmt;
+ if (con.getMetaData().getDriverName().startsWith("HSQL"))
+ {
+ // special handling for HSQLDB
+ stmt = con.prepareStatement(
+ "select top ? u.username,w.name,w.name,sum(r.dayhits) as s "+
+ "from rolleruser as u, website as w, referer as r "+
+ "where r.websiteid=w.id and w.userid=u.id and w.isenabled=? " +
+ "group by u.username,w.name,w.id order by s desc");
+ stmt.setInt(1, max);
+ stmt.setBoolean(2, true);
+ }
+ else
+ {
+ stmt = con.prepareStatement(
+ "select u.username,w.name,w.name,sum(r.dayhits) as s "+
+ "from rolleruser as u, website as w, referer as r "+
+ "where r.websiteid=w.id and w.userid=u.id and w.isenabled= ? " +
+ // Ben Walding (a Postgres SQL user): Basically, you have
+ // to have all non-aggregated columns that exist in your
+ // 'SELECT' section, in the 'GROUP BY' section as well:
+ "group by u.username,w.name,w.id order by s desc limit ?");
+ // and not this: "group by w.id order by s desc");
+ stmt.setBoolean(1, true);
+ stmt.setInt(2, max);
+ }
+ ResultSet rs = stmt.executeQuery();
+ if ( rs.next() )
+ {
+ do
+ {
+ String userName = rs.getString(1);
+ String name = rs.getString(2);
+ String websiteName = rs.getString(3);
+ Integer hits = new Integer(rs.getInt(4));
+ list.add(new WebsiteDisplayData(
+ name,
+ userName,
+ websiteName,
+ hits));
+ }
+ while ( rs.next() );
+ }
+ return list;
+ }
+ catch (Throwable pe)
+ {
+ mLogger.error(msg, pe);
+ throw new RollerException(msg, pe);
+ }
+
+// Don't close connection, Hibernate is holding it
+// finally
+// {
+// try
+// {
+// if (con != null) con.close();
+// }
+// catch (Throwable t)
+// {
+// mLogger.error("Closing connection",t);
+// }
+// }
+
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * Use raw SQL because Hibernate can't handle the query.
+ */
+ protected int getHits(WebsiteData website, String type)
+ throws RollerException
+ {
+ int hits = 0;
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("getHits: " + website.getName());
+ }
+
+ //Question: why not use website.id instead to reduce joins?
+ Object[] args = { Boolean.TRUE, website.getUser().getUserName() };
+ Type[] types = { Hibernate.BOOLEAN, Hibernate.STRING };
+
+ // For a query like this, Hibernate returns a list of lists
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ List results;
+ try
+ {
+ results = session.find(
+ "select sum(h.dayHits),sum(h.totalHits) from h in class " +
+ "org.roller.pojos.RefererData " +
+ "where h.website.isEnabled=? and h.website.user.userName=? ",
+ args, types);
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ Object[] resultsArray = (Object[]) results.get(0);
+
+ if (resultsArray.length > 0 && type.equals(DAYHITS))
+ {
+ if ( resultsArray[0] != null )
+ {
+ hits = ((Integer) resultsArray[0]).intValue();
+ }
+ }
+ else if ( resultsArray.length > 0 )
+ {
+ if ( resultsArray[0] != null )
+ {
+ hits = ((Integer) resultsArray[1]).intValue();
+ }
+ }
+ else
+ {
+ hits = 0;
+ }
+
+ return hits;
+ }
+
+ /**
+ * @see org.roller.pojos.RefererManager#getReferers(java.lang.String)
+ */
+ public List getReferers(WebsiteData website) throws RollerException
+ {
+ if (website==null )
+ throw new RollerException("website is null");
+
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.eq("website",website));
+ criteria.addOrder(Order.desc("totalHits"));
+ try
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * @see org.roller.pojos.RefererManager#getTodaysReferers(String)
+ */
+ public List getTodaysReferers(WebsiteData website)
+ throws RollerException
+ {
+ if (website==null )
+ throw new RollerException("website is null");
+
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.eq("website", website));
+ criteria.add(Expression.gt("dayHits", new Integer(0)));
+ criteria.addOrder(Order.desc("dayHits"));
+ try
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * Returns referers for a specified day. Duplicate enties are not
+ * included in this list so the hit counts may not be accurate.
+ * @see org.roller.pojos.RefererManager#getReferersToDate(
+ * org.roller.pojos.WebsiteData, java.lang.String)
+ */
+ public List getReferersToDate(WebsiteData website, String date)
+ throws RollerException
+ {
+ if (website==null )
+ throw new RollerException("website is null");
+
+ if (date==null )
+ throw new RollerException("Date is null");
+
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.eq("website", website));
+ criteria.add(Expression.eq("dateString", date));
+ criteria.add(Expression.eq("duplicate", Boolean.FALSE));
+ criteria.addOrder(Order.desc("totalHits"));
+ try
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * @see org.roller.pojos.RefererManager#getReferersToEntry(
+ * java.lang.String, java.lang.String)
+ */
+ public List getReferersToEntry(String entryid) throws RollerException
+ {
+ if (null == entryid)
+ throw new RollerException("entryid is null");
+
+ try
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.createAlias("weblogEntry","e");
+
+ criteria.add(Expression.eq("e.id", entryid));
+ criteria.add(Expression.isNotNull("title"));
+ criteria.add(Expression.isNotNull("excerpt"));
+
+ criteria.addOrder(Order.desc("totalHits"));
+
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * @see org.roller.pojos.RefererManager#getReferersToEntry(
+ * java.lang.String, java.lang.String)
+ */
+ public void removeReferersForEntry(String entryid) throws RollerException
+ {
+ if (null == entryid)
+ throw new RollerException("entryid is null");
+
+ try
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.createAlias("weblogEntry","e");
+ criteria.add(Expression.eq("e.id", entryid));
+
+ Iterator referers = criteria.list().iterator();
+ while (referers.hasNext())
+ {
+ removeReferer( ((RefererData)referers.next()).getId() );
+ }
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * Query for collection of referers.
+ */
+ protected List getReferersToWebsite(WebsiteData website, String refererUrl)
+ throws RollerException
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.eq("website", website));
+ criteria.add(Expression.eq("refererUrl", refererUrl));
+ try
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ //-----------------------------------------------------------------------
+
+ /**
+ * Query for collection of referers.
+ */
+ protected List getReferersWithSameTitle(
+ WebsiteData website,
+ String requestUrl,
+ String title,
+ String excerpt)
+ throws RollerException
+ {
+ try
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+
+ Junction conjunction = Expression.conjunction();
+ conjunction.add(Expression.eq("website", website));
+ conjunction.add(Expression.eq("requestUrl", requestUrl));
+
+ Junction disjunction = Expression.conjunction();
+ disjunction.add(Expression.eq("title", title));
+ disjunction.add(Expression.eq("excerpt", excerpt));
+
+ criteria.add(conjunction);
+ criteria.add(disjunction);
+
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ /**
+ * Purge referers at midnight. Zero out all dayHits and remove all
+ * referers that do not have excerpts.
+ */
+ public void checkForTurnover( boolean forceTurnover, String websiteId )
+ throws RollerException
+ {
+ // Note, this method doesn't need to be synchronized anymore since
+ // it's called from the timer task now, and will never be executed
+ // by two threads simultaneously.
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("checkForTurnover");
+ }
+
+ Date now = new Date();
+
+ if (forceTurnover ||
+ !mDateFormat.format(now).equals(mDateFormat.format(mRefDate)))
+ {
+ try
+ {
+ if (websiteId == null) mRefDate = now;
+
+ List refs;
+ try
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(RefererData.class);
+ criteria.add(Expression.gt("dayHits", new Integer(0)));
+ if (websiteId != null)
+ {
+ criteria.add(Expression.eq("website.id", websiteId));
+ }
+ refs = criteria.list();
+ }
+ catch (HibernateException e1)
+ {
+ throw new RollerException(e1);
+ }
+
+ Integer zero = new Integer(0);
+ for (Iterator rdItr = refs.iterator(); rdItr.hasNext();) {
+ RefererData referer = (RefererData) rdItr.next();
+
+ if ( (referer.getExcerpt() != null) &&
+ (referer.getExcerpt().trim().length() > 0))
+ {
+ // Zero out dayHits of referers with excerpts
+ referer.setDayHits(zero);
+ storeReferer(referer);
+ }
+ else
+ {
+ // Throw away referers without excerpts
+ removeReferer(referer.getId());
+ }
+ }
+ }
+ catch (RollerException e)
+ {
+ mLogger.error("EXCEPTION resetting referers",e);
+ }
+ }
+ }
+
+
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRollerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRollerImpl.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRollerImpl.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateRollerImpl.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,307 @@
+/*
+ * Created on Feb 23, 2003
+ */
+package org.roller.business.hibernate;
+
+import net.sf.hibernate.HibernateException;
+import net.sf.hibernate.SessionFactory;
+import net.sf.hibernate.cfg.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.RollerException;
+import org.roller.business.PersistenceStrategy;
+import org.roller.business.utils.UpgradeDatabase;
+import org.roller.model.BookmarkManager;
+import org.roller.model.ConfigManager;
+import org.roller.model.AutoPingManager;
+import org.roller.model.PingQueueManager;
+import org.roller.model.PingTargetManager;
+import org.roller.model.PlanetManager;
+import org.roller.model.PropertiesManager;
+import org.roller.model.RefererManager;
+import org.roller.model.Roller;
+import org.roller.model.UserManager;
+import org.roller.model.WeblogManager;
+import org.roller.pojos.UserData;
+
+import java.sql.Connection;
+
+/**
+ * Implements Roller, the entry point interface for the Roller business tier APIs.
+ * Hibernate specific implementation.
+ *
+ * @author David M Johnson
+ */
+public class HibernateRollerImpl extends org.roller.business.RollerImpl
+{
+ static final long serialVersionUID = 5256135928578074652L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(HibernateRollerImpl.class);
+
+ protected BookmarkManager mBookmarkManager;
+ protected ConfigManager mConfigManager = null;
+ protected PropertiesManager mPropsManager = null;
+ protected PlanetManager planetManager = null;
+ protected RefererManager mRefererManager;
+ protected UserManager mUserManager;
+ protected WeblogManager mWeblogManager;
+ protected PingQueueManager mPingQueueManager;
+ protected AutoPingManager mAutoPingManager;
+ protected PingTargetManager mPingTargetManager;
+ protected static HibernateRollerImpl me;
+ protected PersistenceStrategy mStrategy = null;
+ protected static SessionFactory mSessionFactory;
+
+
+ protected HibernateRollerImpl() throws RollerException
+ {
+ mLogger.debug("Initializing sessionFactory for Hibernate");
+
+ try
+ {
+ Configuration config = new Configuration();
+ config.configure("/hibernate.cfg.xml");
+ mSessionFactory = config.buildSessionFactory();
+ }
+ catch (HibernateException e)
+ {
+ mLogger.error("Error Setting up SessionFactory",e);
+ throw new RollerException(e);
+ }
+
+ mStrategy = new HibernateStrategy(mSessionFactory);
+ }
+
+
+ /**
+ * Instantiates and returns an instance of HibernateRollerImpl.
+ * @see org.roller.model.RollerFactory
+ */
+ public static Roller instantiate() throws RollerException
+ {
+ if (me == null)
+ {
+ mLogger.debug("Instantiating HibernateRollerImpl");
+ me = new HibernateRollerImpl();
+ }
+
+ return me;
+ }
+
+
+ public void begin() throws RollerException
+ {
+ mStrategy.begin(UserData.ANONYMOUS_USER);
+ }
+
+ public void begin(UserData user) throws RollerException
+ {
+ mStrategy.begin(user);
+ }
+
+ public UserData getUser() throws RollerException
+ {
+ return mStrategy.getUser();
+ }
+
+ public void setUser(UserData user) throws RollerException
+ {
+ mStrategy.setUser(user);
+ }
+
+ public void commit() throws RollerException
+ {
+ mStrategy.commit();
+ }
+
+ public void rollback()
+ {
+ try
+ {
+ mStrategy.rollback();
+ }
+ catch (Exception e)
+ {
+ mLogger.error(e);
+ }
+ }
+
+ /**
+ * @see org.roller.model.Roller#getUserManager()
+ */
+ public UserManager getUserManager() throws RollerException
+ {
+ if ( mUserManager == null )
+ {
+ mUserManager = new HibernateUserManagerImpl(mStrategy);
+ }
+ return mUserManager;
+ }
+
+ /**
+ * @see org.roller.model.Roller#getBookmarkManager()
+ */
+ public BookmarkManager getBookmarkManager() throws RollerException
+ {
+ if ( mBookmarkManager == null )
+ {
+ mBookmarkManager = new HibernateBookmarkManagerImpl(mStrategy);
+ }
+ return mBookmarkManager;
+ }
+
+ /**
+ * @see org.roller.model.Roller#getWeblogManager()
+ */
+ public WeblogManager getWeblogManager() throws RollerException
+ {
+ if ( mWeblogManager == null )
+ {
+ mWeblogManager = new HibernateWeblogManagerImpl(mStrategy);
+ }
+ return mWeblogManager;
+ }
+
+ /**
+ * @see org.roller.model.Roller#getRefererManager()
+ */
+ public RefererManager getRefererManager() throws RollerException
+ {
+ if ( mRefererManager == null )
+ {
+ mRefererManager = new HibernateRefererManagerImpl(mStrategy);
+ }
+ return mRefererManager;
+ }
+
+ /**
+ * @see org.roller.model.Roller#getConfigManager()
+ */
+ public ConfigManager getConfigManager() throws RollerException
+ {
+ if (mConfigManager == null)
+ {
+ mConfigManager = new HibernateConfigManagerImpl(mStrategy);
+ }
+ return mConfigManager;
+ }
+
+ /**
+ * @see org.roller.model.Roller#getPropertiesManager()
+ */
+ public PropertiesManager getPropertiesManager() throws RollerException
+ {
+ if (mPropsManager == null)
+ {
+ mPropsManager = new HibernatePropertiesManagerImpl(mStrategy);
+ }
+ return mPropsManager;
+ }
+
+ /**
+ * @see org.roller.model.Roller#getPingTargetManager()
+ */
+ public PingQueueManager getPingQueueManager() throws RollerException
+ {
+ if (mPingQueueManager == null)
+ {
+ mPingQueueManager = new HibernatePingQueueManagerImpl(mStrategy);
+ }
+ return mPingQueueManager;
+ }
+
+ /**
+ * @see org.roller.model.Roller#getPlanetManager()
+ */
+ public PlanetManager getPlanetManager() throws RollerException
+ {
+ if ( planetManager == null )
+ {
+ planetManager = new HibernatePlanetManagerImpl(mStrategy,this);
+ }
+ return planetManager;
+ }
+
+
+ /**
+ * @see org.roller.model.Roller#getPingTargetManager()
+ */
+ public AutoPingManager getAutopingManager() throws RollerException
+ {
+ if (mAutoPingManager == null)
+ {
+ mAutoPingManager = new HibernateAutoPingManagerImpl(mStrategy);
+ }
+ return mAutoPingManager;
+ }
+
+
+ /**
+ * @see org.roller.model.Roller#getPingTargetManager()
+ */
+ public PingTargetManager getPingTargetManager() throws RollerException
+ {
+ if (mPingTargetManager == null)
+ {
+ mPingTargetManager = new HibernatePingTargetManagerImpl(mStrategy);
+ }
+ return mPingTargetManager;
+ }
+
+
+ /**
+ * @see org.roller.model.Roller#getPersistenceStrategy()
+ */
+ public PersistenceStrategy getPersistenceStrategy()
+ {
+ return mStrategy;
+ }
+
+ /**
+ * @see org.roller.model.Roller#upgradeDatabase(java.sql.Connection)
+ */
+ public void upgradeDatabase(Connection con) throws RollerException
+ {
+ UpgradeDatabase.upgradeDatabase(con);
+ }
+
+ public void release()
+ {
+ super.release();
+
+ if (mBookmarkManager != null) mBookmarkManager.release();
+ if (mConfigManager != null) mConfigManager.release();
+ if (mRefererManager != null) mRefererManager.release();
+ if (mUserManager != null) mUserManager.release();
+ if (mWeblogManager != null) mWeblogManager.release();
+ if (mPingTargetManager != null) mPingTargetManager.release();
+ if (mPingQueueManager != null) mPingQueueManager.release();
+ if (mAutoPingManager != null) mAutoPingManager.release();
+
+ try
+ {
+ if (mStrategy != null) mStrategy.release();
+ }
+ catch (Exception e)
+ {
+ mLogger.error(
+ "Exception with mSupport.release() [" + e + "]", e);
+ }
+ }
+
+ public void shutdown()
+ {
+ super.shutdown();
+
+ try
+ {
+ release();
+ mSessionFactory.close();
+ }
+ catch (HibernateException e)
+ {
+ mLogger.error("Unable to close SessionFactory", e);
+ }
+ }
+}
Added: incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateStrategy.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateStrategy.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateStrategy.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateStrategy.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,463 @@
+/*
+ * Created on Mar 7, 2003
+ */
+package org.roller.business.hibernate;
+
+import java.util.List;
+
+import net.sf.hibernate.HibernateException;
+import net.sf.hibernate.ObjectNotFoundException;
+import net.sf.hibernate.Session;
+import net.sf.hibernate.SessionFactory;
+import net.sf.hibernate.type.Type;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.RollerException;
+import org.roller.RollerPermissionsException;
+import org.roller.business.PersistenceStrategy;
+import org.roller.model.PersistenceSession;
+import org.roller.pojos.PersistentObject;
+import org.roller.pojos.UserData;
+
+
+///////////////////////////////////////////////////////////////////////////////
+/**
+ * Reusable Hibernate implementations of CRUD operations.
+ * @author David M Johnson
+ */
+public class HibernateStrategy implements PersistenceStrategy
+{
+ static final long serialVersionUID = 2561090040518169098L;
+ private static SessionFactory mSessionFactory = null;
+ private static final ThreadLocal mSessionTLS = new ThreadLocal();
+ //private static final ThreadLocal mTransactionTLS = new ThreadLocal();
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(HibernateStrategy.class);
+
+ //-------------------------------------------------------------------------
+ /**
+ * Construct using Hibernate Session Factory.
+ */
+ public HibernateStrategy(SessionFactory factory) throws RollerException
+ {
+ mSessionFactory = factory;
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Start new Roller persistence session on current thread.
+ */
+ public void begin(UserData user) throws RollerException
+ {
+ getPersistenceSession(user, true); // force create of new session
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Start new Roller persistence session on current thread.
+ */
+ public void setUser(UserData user) throws RollerException
+ {
+ PersistenceSession pses = getPersistenceSession(user, false);
+ pses.setUser(user);
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Start new Roller persistence session on current thread.
+ */
+ public UserData getUser() throws RollerException
+ {
+ PersistenceSession pses = getPersistenceSession(null, false);
+ return pses.getUser();
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Get existing persistence session on current thread.
+ */
+ public Session getSession() throws RollerException
+ {
+ return (Session)(getPersistenceSession(
+ UserData.ANONYMOUS_USER, false).getSessionObject());
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Get existing or open new persistence session for current thread
+ * @param createNew True if existing session on thread is an warn condition.
+ */
+ public PersistenceSession getPersistenceSession(UserData user, boolean createNew)
+ throws RollerException
+ {
+ PersistenceSession ses = (PersistenceSession)mSessionTLS.get();
+ if (createNew && ses != null)
+ {
+ mLogger.warn("TLS not empty at beginnng of request");
+ release();
+ ses = null;
+ }
+ if (ses == null && user != null)
+ {
+ try
+ {
+ Session hses = mSessionFactory.openSession();
+ ses = new HibernatePersistenceSession(user, hses);
+ }
+ catch (Exception e)
+ {
+ mLogger.error(Messages.getString(
+ "HibernateStrategy.exceptionOpeningSession"));
+ throw new RuntimeException();
+ }
+ mSessionTLS.set(ses);
+ }
+ else if (ses == null)
+ {
+ throw new RollerException(
+ "MUST specify user for new persistence session");
+ }
+ return ses;
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * This is called on error to start a new Hibernate session.
+ * Gavin: "make sure you never catch + handle an exception and
+ * then keep using the session (ObjectNotFoundException included!)
+ */
+ private void newSession() throws RollerException
+ {
+ PersistenceSession pses = getPersistenceSession(null, false);
+ UserData user = pses.getUser();
+ release();
+ getPersistenceSession(user, true);
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Release database session, rolls back any uncommitted changes.
+ */
+ public void release() throws RollerException
+ {
+ PersistenceSession pses = (PersistenceSession)mSessionTLS.get();
+ if ( null == pses ) return; // there is no session to release
+ mSessionTLS.set(null); // sets thread's session to null
+ Session ses = (Session)pses.getSessionObject();
+ if (ses != null)
+ {
+ try
+ {
+ if (ses.isOpen())
+ {
+ ses.close();
+ }
+ }
+ catch (Throwable he)
+ {
+ mLogger.error("ERROR cleaning up Hibernate session", he);
+ }
+ }
+ ses = null;
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Remove object from persistence storage.
+ * @param clazz Class of object to remove.
+ * @param id Id of object to remove.
+ * @throws RollerException Error deleting object.
+ */
+ public void remove( String id, Class clazz ) throws RollerException
+ {
+ if ( id == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullNotValidId"));
+ }
+ if ( clazz == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullNotValidClass"));
+ }
+
+ // Create persistent instance and delete it
+ PersistentObject obj;
+ try
+ {
+ obj = (PersistentObject)getSession().load(clazz,id);
+ if (obj.canSave())
+ {
+ getSession().delete(obj);
+ }
+ else
+ {
+ throw new RollerPermissionsException("DENIED: cannot remove");
+ }
+ }
+ catch (HibernateException e)
+ {
+ String msg = Messages.formatString(
+ "HibernateStrategy.exceptionRemoving",id,clazz.getName());
+ mLogger.error(msg, e);
+
+ newSession();
+ throw new RollerException(e);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Remove object from persistence storage.
+ */
+ public void remove(PersistentObject po) throws RollerException
+ {
+ if (!po.canSave())
+ {
+ throw new RollerPermissionsException(
+ "DENIED: cannot remove: "+po.toString());
+ }
+ try
+ {
+ if (po.getId() != null) // no need to delete transient object
+ {
+ getSession().delete(po);
+ }
+ }
+ catch (HibernateException e)
+ {
+ String msg = Messages.formatString(
+ "HibernateStrategy.exceptionRemoving",po.getId());
+ mLogger.error(msg, e);
+ newSession();
+ throw new RollerException(e);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Retrieve object, begins and ends its own transaction.
+ * @param clazz Class of object to retrieve.
+ * @param id Id of object to retrieve.
+ * @return Object Object retrieved.
+ * @throws RollerException Error retrieving object.
+ */
+ public PersistentObject load(String id, Class clazz)
+ throws RollerException
+ {
+ if ( id == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullNotValidId"));
+ }
+
+ if ( clazz == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullNotValidClass"));
+ }
+
+ Object obj = null;
+ Session ses = getSession();
+ try
+ {
+ obj = (PersistentObject)ses.load( clazz, id );
+ }
+ catch (Exception e)
+ {
+ if (mLogger.isDebugEnabled())
+ {
+ if (e instanceof ObjectNotFoundException)
+ {
+ mLogger.debug("No " + clazz.getName() + " found for ID:" + id);
+ }
+ else
+ {
+ String msg = Messages.formatString(
+ "HibernateStrategy.exceptionRetrieving", id, clazz.getName());
+ mLogger.debug(msg, e);
+ }
+ }
+ newSession();
+ }
+ return (PersistentObject)obj;
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Store object using an existing transaction.
+ */
+ public PersistentObject store(PersistentObject obj)
+ throws RollerException
+ {
+ if ( obj == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullPassedIn"));
+ }
+ if (!obj.canSave())
+ {
+ throw new RollerPermissionsException(
+ "DENIED: cannot save: "+obj.toString());
+ }
+ Session ses = getSession();
+ try
+ {
+ // TODO: better to use ses.saveOrUpdate() here, if possible
+ if ( obj.getId() == null || obj.getId().trim().equals("") )
+ {
+ // Object has never been written to database, so save it.
+ // This makes obj into a persistent instance.
+ ses.save(obj);
+ }
+
+ if ( !ses.contains(obj) )
+ {
+ // Object has been written to database, but instance passed in
+ // is not a persistent instance, so must be loaded into session.
+ PersistentObject vo =
+ (PersistentObject)ses.load(obj.getClass(),obj.getId());
+ vo.setData(obj);
+ obj = vo;
+ }
+ }
+ catch (HibernateException e)
+ {
+ String msg = Messages.formatString(
+ "HibernateStrategy.exceptionStoring",obj.getId());
+ mLogger.error(msg, e);
+ newSession();
+ throw new RollerException(msg,e);
+ }
+ return obj;
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Execute Hibernate HSQL query
+ */
+ public List query( String query, Object[] args, Object[] types)
+ throws RollerException
+ {
+ return query(query, args, (Type[])types);
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Execute Hibernate HSQL query
+ */
+ public List query( String query, Object[] args, Type[] types )
+ throws RollerException
+ {
+ if ( query == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullNotValidQuery"));
+ }
+
+ if ( args == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullNotValidArgArray"));
+ }
+
+ if ( types == null )
+ {
+ throw new RollerException(Messages.getString(
+ "HibernateStrategy.nullNotValidArrayType"));
+ }
+
+ try
+ {
+ if (query.indexOf("$") > -1)
+ {
+ query = query.replaceAll("\\$\\d+", "\\?");
+ }
+ return getSession().find(query,args,types);
+ }
+ catch (Exception e)
+ {
+ String msg = Messages.getString("HibernateStrategy.duringQuery");
+ mLogger.error(msg, e);
+ newSession();
+ throw new RollerException(msg,e);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Execute Hibernate HSQL query
+ */
+ public List query( String query )
+ throws RollerException
+ {
+ try
+ {
+ if (query.indexOf("$") > -1)
+ {
+ query = query.replaceAll("\\$\\d+", "\\?");
+ }
+ return getSession().find(query);
+ }
+ catch (Exception e)
+ {
+ String msg = Messages.getString("HibernateStrategy.duringQuery");
+ mLogger.error(msg, e);
+ newSession();
+ throw new RollerException(msg,e);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Commits current transaction, if there is one, does not release session.
+ */
+ public void commit() throws RollerException
+ {
+ try
+ {
+ if (mSessionTLS.get()!=null)
+ {
+ getSession().flush();
+
+ // can't call commit when autocommit is true
+ if (!getSession().connection().getAutoCommit())
+ {
+ getSession().connection().commit();
+ }
+ }
+ }
+ catch (Exception he) // HibernateExeption or SQLException
+ {
+ newSession();
+ throw new RollerException(he);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ /**
+ * Rollback uncommitted changes, does not release session.
+ */
+ public void rollback() throws RollerException
+ {
+ // Can't call rollback when autoCommit=true
+ try
+ {
+ if (!getSession().connection().getAutoCommit())
+ {
+ getSession().connection().rollback();
+ }
+ }
+ catch (Exception he)
+ {
+ newSession();
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("ERROR during rollback",he);
+ }
+ }
+ }
+}
+
Added: incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateUserManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateUserManagerImpl.java?rev=327589&view=auto
==============================================================================
--- incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateUserManagerImpl.java (added)
+++ incubator/roller/branches/roller_1.x/src/org/roller/business/hibernate/HibernateUserManagerImpl.java Fri Oct 21 14:27:36 2005
@@ -0,0 +1,432 @@
+/*
+ * Created on Jun 16, 2004
+ */
+package org.roller.business.hibernate;
+
+import net.sf.hibernate.Criteria;
+import net.sf.hibernate.HibernateException;
+import net.sf.hibernate.Session;
+import net.sf.hibernate.expression.Expression;
+import net.sf.hibernate.expression.EqExpression;
+import net.sf.hibernate.expression.Order;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.roller.RollerException;
+import org.roller.business.PersistenceStrategy;
+import org.roller.business.UserManagerImpl;
+import org.roller.model.BookmarkManager;
+import org.roller.model.RollerFactory;
+import org.roller.model.WeblogManager;
+import org.roller.model.AutoPingManager;
+import org.roller.model.PingTargetManager;
+import org.roller.model.PingQueueManager;
+import org.roller.pojos.FolderData;
+import org.roller.pojos.WeblogTemplate;
+import org.roller.pojos.RefererData;
+import org.roller.pojos.RoleData;
+import org.roller.pojos.UserCookieData;
+import org.roller.pojos.UserData;
+import org.roller.pojos.WeblogCategoryData;
+import org.roller.pojos.WeblogEntryData;
+import org.roller.pojos.WebsiteData;
+import org.roller.util.StringUtils;
+import org.roller.util.Utilities;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Hibernate queries.
+ * @author David M Johnson
+ */
+public class HibernateUserManagerImpl extends UserManagerImpl
+{
+ static final long serialVersionUID = -5128460637997081121L;
+
+ private static Log mLogger =
+ LogFactory.getFactory().getInstance(HibernateUserManagerImpl.class);
+
+ /**
+ * @param strategy
+ */
+ public HibernateUserManagerImpl(PersistenceStrategy strategy)
+ {
+ super(strategy);
+ mLogger.debug("Instantiating User Manager");
+ }
+
+ /**
+ * Use Hibernate directly because Roller's Query API does too much allocation.
+ */
+ 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);
+ }
+ }
+
+ /**
+ * Use Hibernate directly because Roller's Query API does too much allocation.
+ */
+ public WebsiteData getWebsite(String userName, boolean enabledOnly)
+ throws RollerException
+ {
+ if (userName==null )
+ throw new RollerException("userName is null");
+
+ try
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(WebsiteData.class);
+ criteria.createAlias("user","u");
+
+ if (enabledOnly)
+ {
+ criteria.add(
+ Expression.conjunction()
+ .add(new EqExpression("u.userName",userName,true))
+ .add(Expression.eq("isEnabled",Boolean.TRUE)));
+ }
+ else
+ {
+ criteria.add(
+ Expression.conjunction()
+ .add(new EqExpression("u.userName",userName,true)));
+ }
+
+ List list = criteria.list();
+ return list.size()!=0 ? (WebsiteData)list.get(0) : null;
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ /**
+ * @see org.roller.model.UserManager#removeLoginCookies(java.lang.String)
+ */
+ public void removeLoginCookies(String username) throws RollerException
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(UserCookieData.class);
+ criteria.add(Expression.eq("username", username));
+ List list;
+ try
+ {
+ list = criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ for (Iterator it = list.iterator(); it.hasNext();)
+ {
+ String id = ((UserCookieData) it.next()).getId();
+ mStrategy.remove(id, UserCookieData.class);
+ }
+ }
+
+ /**
+ * @see org.roller.model.UserManager#checkLoginCookie(java.lang.String)
+ */
+ public String checkLoginCookie(String value) throws RollerException
+ {
+ try
+ {
+ value = Utilities.decodeString(value);
+ }
+ catch (IOException io)
+ {
+ mLogger.warn("Failed to decode rememberMe cookieString");
+ return null;
+ }
+
+ String[] values = StringUtils.split(value, "|");
+
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("looking up cookieId: " + values[1]);
+ }
+
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(UserCookieData.class);
+ criteria.add(Expression.eq("username", values[0]));
+ criteria.add(Expression.eq("cookieId", values[1]));
+
+ List list;
+ try
+ {
+ list = criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ UserCookieData cookie = (list.size() > 0) ? (UserCookieData)list.get(0) : null;
+
+ if (cookie != null)
+ {
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("cookieId lookup succeeded, generating new cookieId");
+ }
+ return saveLoginCookie(cookie);
+ }
+ else
+ {
+ if (mLogger.isDebugEnabled())
+ {
+ mLogger.debug("cookieId lookup failed, returning null");
+ }
+
+ return null;
+ }
+ }
+
+ //------------------------------------------------------------------------
+ /**
+ * @see org.roller.model.UserManager#getPages(WebsiteData)
+ */
+ 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
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ /**
+ * @see org.roller.model.UserManager#getPageByName(WebsiteData, java.lang.String)
+ */
+ public WeblogTemplate getPageByName(WebsiteData website, String pagename)
+ 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
+ {
+ List list = criteria.list();
+ return list.size()!=0 ? (WeblogTemplate)list.get(0) : null;
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ /*
+ * @see org.roller.business.UserManagerBase#getRoles(org.roller.pojos.UserData)
+ */
+ public List getUserRoles(UserData user) 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 enabledOnly) throws RollerException
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ if (enabledOnly)
+ {
+ Criteria criteria = session.createCriteria(WebsiteData.class);
+ criteria.add(Expression.eq("isEnabled", Boolean.TRUE));
+ try
+ {
+ List users = new ArrayList();
+ Iterator websites = criteria.list().iterator();
+ while (websites.hasNext())
+ {
+ WebsiteData website = (WebsiteData) websites.next();
+ users.add(website.getUser());
+ }
+ return users;
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+ else
+ {
+ Criteria criteria = session.createCriteria(UserData.class);
+ try
+ {
+ return criteria.list();
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+ }
+
+ /**
+ * @see org.roller.model.UserManager#removeUserWebsites(org.roller.pojos.UserData)
+ */
+ public void removeUserWebsites(UserData user) throws RollerException
+ {
+ Session session = ((HibernateStrategy)mStrategy).getSession();
+ Criteria criteria = session.createCriteria(WebsiteData.class);
+ criteria.add(Expression.eq("user", user));
+ try
+ {
+ List websites = criteria.list();
+ for (Iterator iter = websites.iterator(); iter.hasNext();)
+ {
+ WebsiteData website = (WebsiteData)iter.next();
+ website.remove();
+ }
+ }
+ catch (HibernateException e)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+ /**
+ * @see org.roller.model.UserManager#removeWebsiteContents(org.roller.pojos.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();
+ //PersistenceStrategy pstrat = RollerFactory.getRoller().getPersistenceStrategy();
+ //QueryFactory factory = pstrat.getQueryFactory();
+
+ // 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 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();
+ entry.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)
+ {
+ throw new RollerException(e);
+ }
+ }
+
+}
+