You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2006/04/09 00:36:28 UTC
svn commit: r392618 [5/5] - in
/incubator/roller/branches/roller-newbackend/src/org/roller/business: ./
hibernate/ search/operations/
Modified: incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateWeblogManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateWeblogManagerImpl.java?rev=392618&r1=392617&r2=392618&view=diff
==============================================================================
--- incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateWeblogManagerImpl.java (original)
+++ incubator/roller/branches/roller-newbackend/src/org/roller/business/hibernate/HibernateWeblogManagerImpl.java Sat Apr 8 15:36:25 2006
@@ -3,18 +3,16 @@
*/
package org.roller.business.hibernate;
+import java.text.SimpleDateFormat;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Junction;
import org.hibernate.criterion.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.WeblogManagerImpl;
import org.roller.model.Roller;
import org.roller.model.RollerFactory;
import org.roller.pojos.Assoc;
@@ -25,91 +23,404 @@
import org.roller.pojos.WeblogEntryData;
import org.roller.pojos.WebsiteData;
import org.roller.util.StringUtils;
-
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import org.apache.commons.collections.comparators.ReverseComparator;
import org.hibernate.criterion.MatchMode;
+import org.roller.model.WeblogManager;
+import org.roller.util.DateUtil;
+import org.roller.util.Utilities;
+
/**
- * Hibernate queries, see comments in parent interface.
- * @author David M Johnson
+ * Hibernate implementation of the WeblogManager.
*/
-public class HibernateWeblogManagerImpl extends WeblogManagerImpl
-{
+public class HibernateWeblogManagerImpl implements WeblogManager {
+
static final long serialVersionUID = -3730860865389981439L;
- private static Log mLogger =
- LogFactory.getFactory().getInstance(HibernateWeblogManagerImpl.class);
-
- public HibernateWeblogManagerImpl(PersistenceStrategy strategy)
- {
- super(strategy);
- mLogger.debug("Instantiating Weblog Manager");
+ private static Log log = LogFactory.getLog(HibernateWeblogManagerImpl.class);
+
+ private HibernatePersistenceStrategy strategy = null;
+
+ /* inline creation of reverse comparator, anonymous inner class */
+ private Comparator reverseComparator = new ReverseComparator();
+
+ private SimpleDateFormat formatter = DateUtil.get8charDateFormat();
+
+
+ public HibernateWeblogManagerImpl(HibernatePersistenceStrategy strat) {
+ log.debug("Instantiating Hibernate Weblog Manager");
+
+ this.strategy = strat;
+ }
+
+
+ public WeblogCategoryData createWeblogCategory() {
+ return new WeblogCategoryData();
+ }
+
+
+ public WeblogCategoryData createWeblogCategory(
+ WebsiteData website,
+ WeblogCategoryData parent,
+ String name,
+ String description,
+ String image) throws RollerException {
+ return new WeblogCategoryData(
+ null, website, parent, name, description, image);
+ }
+
+
+ public void storeWeblogCategory(WeblogCategoryData cat) throws RollerException {
+ // TODO: new method
+ }
+
+
+ public WeblogCategoryAssoc createWeblogCategoryAssoc() {
+ return new WeblogCategoryAssoc();
+ }
+
+
+ public WeblogCategoryAssoc createWeblogCategoryAssoc(
+ WeblogCategoryData category,
+ WeblogCategoryData ancestor,
+ String relation) throws RollerException {
+ return new WeblogCategoryAssoc(null, category, ancestor, relation);
+ }
+
+
+ // TODO: backend refactorings, transaction support
+ public void moveWeblogCategoryContents(String srcId, String destId)
+ throws RollerException {
+
+ WeblogCategoryData srcCd =
+ (WeblogCategoryData) this.strategy.load(
+ srcId, WeblogCategoryData.class);
+
+ WeblogCategoryData destCd =
+ (WeblogCategoryData) this.strategy.load(
+ destId, WeblogCategoryData.class);
+
+ if (destCd.descendentOf(srcCd)) {
+ throw new RollerException(
+ "ERROR cannot move parent category into it's own child");
+ }
+
+ // get all entries in category and subcats
+ List results = retrieveWeblogEntries(srcCd, true);
+
+ // Loop through entries in src cat, assign them to dest cat
+ Iterator iter = results.iterator();
+ WebsiteData website = destCd.getWebsite();
+ while (iter.hasNext()) {
+ WeblogEntryData entry = (WeblogEntryData) iter.next();
+ entry.setCategory(destCd);
+ entry.setWebsite(website);
+ entry.save();
+ }
+
+ // Make sure website's default and bloggerapi categories
+ // are valid after the move
+
+ if (srcCd.getWebsite().getDefaultCategory().getId().equals(srcId)
+ || srcCd.getWebsite().getDefaultCategory().descendentOf(srcCd)) {
+ srcCd.getWebsite().setDefaultCategory(destCd);
+ }
+
+ if (srcCd.getWebsite().getBloggerCategory().getId().equals(srcId)
+ || srcCd.getWebsite().getBloggerCategory().descendentOf(srcCd)) {
+ srcCd.getWebsite().setBloggerCategory(destCd);
+ }
}
+
+ // TODO: rename to storeComment() for consistency
+ public void saveComment(CommentData comment) throws RollerException {
+ this.strategy.storeAndCommit(comment);
+ }
+
+
+ public void removeComment(String id) throws RollerException {
+ this.strategy.removeAndCommit(id, CommentData.class);
+ }
+
+
+ // TODO: refactor to use a Collection rather than array[]
+ public void removeComments(String[] ids) throws RollerException {
+
+ if(ids.length < 1) {
+ // nothing to be done
+ return;
+ }
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ // just go through the list and remove each id
+ for(int i=0; i < ids.length; i++) {
+ this.strategy.remove(ids[i], CommentData.class);
+ }
+
+ // 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);
+ }
+ }
+
+
+ public void removeCommentsForEntry(String entryId) throws RollerException {
+
+ if(entryId == null) {
+ throw new RollerException("cannot remove null entry");
+ }
+
+ WeblogEntryData entry = retrieveWeblogEntry(entryId);
+ List comments = getComments(
+ null, // website
+ entry,
+ null, // search String
+ null, // startDate
+ null, // endDate
+ null, // pending
+ null, // approved
+ null, // spam
+ true, // reverse chrono order (not that it matters)
+ 0, // offset
+ -1); // no limit
+
+ this.removeComments(comments);
+ }
+
+
+ // convenience method for removing a list of comments
+ private void removeComments(List comments) throws RollerException {
+
+ if(comments.size() < 1) {
+ // nothing to be done
+ return;
+ }
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ // just go through the list and remove each commentsIT
+ Iterator commentsIT = comments.iterator();
+ while (commentsIT.hasNext()) {
+ this.strategy.remove((CommentData) commentsIT.next());
+ }
+
+ // 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);
+ }
+ }
+
+
+ public void storeWeblogEntry(WeblogEntryData entry) throws RollerException {
+ // TODO: new method
+ }
+
+
+ public void removeWeblogEntry(String id) throws RollerException {
+
+ if(id == null) {
+ throw new RollerException("cannot remove null entry");
+ }
+
+ try {
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
+
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ WeblogEntryData entry = retrieveWeblogEntry(id);
+
+ // remove referers
+ Criteria refererQuery = session.createCriteria(RefererData.class);
+ refererQuery.add(Expression.eq("weblogEntry", entry));
+ List referers = refererQuery.list();
+ for (Iterator iter = referers.iterator(); iter.hasNext();) {
+ RefererData referer = (RefererData) iter.next();
+ this.strategy.remove(referer);
+ }
+
+ // remove comments
+ List comments = getComments(
+ null, // website
+ entry,
+ null, // search String
+ null, // startDate
+ null, // endDate
+ null, // pending
+ null, // approved
+ null, // spam
+ true, // reverse chrono order (not that it matters)
+ 0, // offset
+ -1); // no limit
+ Iterator commentsIT = comments.iterator();
+ while (commentsIT.hasNext()) {
+ this.strategy.remove((CommentData) commentsIT.next());
+ }
+
+ // remove entry
+ this.strategy.remove(id, WeblogEntryData.class);
+
+ // 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);
+ }
+ }
+
+
+ public void removeWeblogEntryContents(WeblogEntryData entry)
+ throws RollerException {
+
+ if(entry == null) {
+ throw new RollerException("cannot remove null entry");
+ }
+
+ try {
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
+
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ // remove referers
+ Criteria refererQuery = session.createCriteria(RefererData.class);
+ refererQuery.add(Expression.eq("weblogEntry", entry));
+ List referers = refererQuery.list();
+ for (Iterator iter = referers.iterator(); iter.hasNext();) {
+ RefererData referer = (RefererData) iter.next();
+ this.strategy.remove(referer);
+ }
+
+ // remove comments
+ List comments = getComments(
+ null, // website
+ entry,
+ null, // search String
+ null, // startDate
+ null, // endDate
+ null, // pending
+ null, // approved
+ null, // spam
+ true, // reverse chrono order (not that it matters)
+ 0, // offset
+ -1); // no limit
+ Iterator commentsIT = comments.iterator();
+ while (commentsIT.hasNext()) {
+ this.strategy.remove((CommentData) commentsIT.next());
+ }
+
+ // 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);
+ }
+ }
+
+
public List getNextPrevEntries(
WeblogEntryData current, String catName, int maxEntries, boolean next)
- throws RollerException
- {
- if (catName != null && catName.trim().equals("/"))
- {
+ throws RollerException {
+ if (catName != null && catName.trim().equals("/")) {
catName = null;
}
- Junction conjunction = Expression.conjunction();
+ Junction conjunction = Expression.conjunction();
conjunction.add(Expression.eq("website", current.getWebsite()));
conjunction.add(Expression.eq("status", WeblogEntryData.PUBLISHED));
- if (next)
- {
+ if (next) {
conjunction.add(Expression.gt("pubTime", current.getPubTime()));
- }
- else
- {
+ } else {
conjunction.add(Expression.lt("pubTime", current.getPubTime()));
}
- if (catName != null)
- {
- WeblogCategoryData category =
- getWeblogCategoryByPath(current.getWebsite(), null, catName);
- if (category != null)
- {
+ if (catName != null) {
+ WeblogCategoryData category =
+ getWeblogCategoryByPath(current.getWebsite(), null, catName);
+ if (category != null) {
conjunction.add(Expression.eq("category", category));
- }
- else
- {
+ } else {
throw new RollerException("Cannot find category: "+catName);
}
}
-
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogEntryData.class);
criteria.addOrder(next ? Order.asc("pubTime") : Order.desc("pubTime"));
criteria.add(conjunction);
criteria.setMaxResults(maxEntries);
List results = criteria.list();
return results;
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
public WeblogCategoryData getRootWeblogCategory(WebsiteData website)
- throws RollerException
- {
+ throws RollerException {
if (website == null)
throw new RollerException("website is null");
-
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.createAlias("category","c");
@@ -117,607 +428,485 @@
criteria.add(Expression.isNull("ancestorCategory"));
criteria.add(Expression.eq("relation", WeblogCategoryAssoc.PARENT));
- criteria.setMaxResults(1);
+ criteria.setMaxResults(1);
List list = criteria.list();
return ((WeblogCategoryAssoc)list.get(0)).getCategory();
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
- public List getWeblogCategories(WebsiteData website, boolean includeRoot)
- throws RollerException
- {
+ public List getWeblogCategories(WebsiteData website, boolean includeRoot)
+ throws RollerException {
if (website == null)
throw new RollerException("website is null");
if (includeRoot) return getWeblogCategories(website);
-
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
+ Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.createAlias("category", "c");
criteria.add(Expression.eq("c.website", website));
criteria.add(Expression.isNotNull("ancestorCategory"));
criteria.add(Expression.eq("relation", "PARENT"));
Iterator assocs = criteria.list().iterator();
List cats = new ArrayList();
- while (assocs.hasNext())
- {
+ while (assocs.hasNext()) {
WeblogCategoryAssoc assoc = (WeblogCategoryAssoc) assocs.next();
cats.add(assoc.getCategory());
}
return cats;
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
- public List getWeblogCategories(WebsiteData website) throws RollerException
- {
+ public List getWeblogCategories(WebsiteData website) throws RollerException {
if (website == null)
throw new RollerException("website is null");
-
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(WeblogCategoryData.class);
- criteria.add(Expression.eq("website", website));
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
+ Criteria criteria = session.createCriteria(WeblogCategoryData.class);
+ criteria.add(Expression.eq("website", website));
return criteria.list();
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
public List getWeblogEntries(
- WebsiteData website,
- Date startDate,
- Date endDate,
- String catName,
- String status,
- String sortby,
- Integer maxEntries) throws RollerException
- {
- WeblogCategoryData cat = null;
- if (StringUtils.isNotEmpty(catName) && website != null)
- {
- cat = getWeblogCategoryByPath(website, catName);
- if (cat == null) catName = null;
+ WebsiteData website,
+ Date startDate,
+ Date endDate,
+ String catName,
+ String status,
+ String sortby,
+ Integer maxEntries) throws RollerException {
+ WeblogCategoryData cat = null;
+ if (StringUtils.isNotEmpty(catName) && website != null) {
+ cat = getWeblogCategoryByPath(website, catName);
+ if (cat == null) catName = null;
}
- if (catName != null && catName.trim().equals("/"))
- {
+ if (catName != null && catName.trim().equals("/")) {
catName = null;
}
-
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogEntryData.class);
- if (website != null)
- {
+ if (website != null) {
criteria.add(Expression.eq("website", website));
- }
- else
- {
+ } else {
criteria.createAlias("website","w");
criteria.add(Expression.eq("w.enabled", Boolean.TRUE));
}
-
- if (startDate != null)
- {
+
+ if (startDate != null) {
criteria.add(
- Expression.ge("pubTime", startDate));
+ Expression.ge("pubTime", startDate));
}
- if (endDate != null)
- {
+ if (endDate != null) {
criteria.add(
- Expression.le("pubTime", endDate));
+ Expression.le("pubTime", endDate));
}
-
- if (cat != null && website != null)
- {
+
+ if (cat != null && website != null) {
criteria.add(Expression.eq("category", cat));
}
- if (status != null)
- {
+ if (status != null) {
criteria.add(Expression.eq("status", status));
- }
-
- if (sortby != null && sortby.equals("updateTime"))
- {
- criteria.addOrder(Order.desc("updateTime"));
}
- else
- {
+
+ if (sortby != null && sortby.equals("updateTime")) {
+ criteria.addOrder(Order.desc("updateTime"));
+ } else {
criteria.addOrder(Order.desc("pubTime"));
}
- if (maxEntries != null)
- {
+ if (maxEntries != null) {
criteria.setMaxResults(maxEntries.intValue());
- }
- return criteria.list();
- }
- catch (HibernateException e)
- {
- mLogger.error(e);
+ }
+ return criteria.list();
+ } catch (HibernateException e) {
+ log.error(e);
throw new RollerException(e);
}
}
- public List getWeblogEntriesPinnedToMain(Integer max) throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ public List getWeblogEntriesPinnedToMain(Integer max) throws RollerException {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogEntryData.class);
- criteria.add(Expression.eq("pinnedToMain", Boolean.TRUE));
- criteria.addOrder(Order.desc("pubTime"));
- if (max != null)
- {
+ criteria.add(Expression.eq("pinnedToMain", Boolean.TRUE));
+ criteria.addOrder(Order.desc("pubTime"));
+ if (max != null) {
criteria.setMaxResults(max.intValue());
- }
+ }
return criteria.list();
- }
- catch (HibernateException e)
- {
- mLogger.error(e);
+ } catch (HibernateException e) {
+ log.error(e);
throw new RollerException(e);
}
}
public WeblogEntryData getWeblogEntryByAnchor(
- WebsiteData website, String anchor) throws RollerException
- {
+ WebsiteData website, String anchor) throws RollerException {
if (website == null)
throw new RollerException("Website is null");
-
+
if (anchor == null)
throw new RollerException("Anchor is null");
-
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(WeblogEntryData.class);
- criteria.add(Expression.conjunction()
- .add(Expression.eq("website",website))
- .add(Expression.eq("anchor",anchor)));
- criteria.addOrder(Order.desc("pubTime"));
- criteria.setMaxResults(1);
- try
- {
+
+
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
+ Criteria criteria = session.createCriteria(WeblogEntryData.class);
+ criteria.add(Expression.conjunction()
+ .add(Expression.eq("website",website))
+ .add(Expression.eq("anchor",anchor)));
+ criteria.addOrder(Order.desc("pubTime"));
+ criteria.setMaxResults(1);
+
List list = criteria.list();
return list.size()!=0 ? (WeblogEntryData)list.get(0) : null;
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
+
public Date getWeblogLastPublishTime(WebsiteData website, String catName)
- throws RollerException
- {
+ throws RollerException {
WeblogCategoryData cat = null;
Roller mRoller = RollerFactory.getRoller();
- if (catName != null && website != null)
- {
- cat = getWeblogCategoryByPath(website, null, catName);
- if (cat == null) catName = null;
+ if (catName != null && website != null) {
+ cat = getWeblogCategoryByPath(website, null, catName);
+ if (cat == null) catName = null;
}
- if (catName != null && catName.trim().equals("/"))
- {
+ if (catName != null && catName.trim().equals("/")) {
catName = null;
}
- Session session = ((HibernateStrategy)mStrategy).getSession();
- Criteria criteria = session.createCriteria(WeblogEntryData.class);
- criteria.add(Expression.eq("status", WeblogEntryData.PUBLISHED));
- criteria.add(Expression.le("pubTime", new Date()));
-
- try
- {
- if (website != null)
- {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
+ Criteria criteria = session.createCriteria(WeblogEntryData.class);
+ criteria.add(Expression.eq("status", WeblogEntryData.PUBLISHED));
+ criteria.add(Expression.le("pubTime", new Date()));
+
+ if (website != null) {
criteria.add(Expression.eq("website", website));
}
-
- if ( cat != null )
- {
+
+ if ( cat != null ) {
criteria.add(Expression.eq("category", cat));
}
criteria.addOrder(Order.desc("pubTime"));
- criteria.setMaxResults(1);
+ criteria.setMaxResults(1);
List list = criteria.list();
- if (list.size() > 0)
- {
+ if (list.size() > 0) {
return ((WeblogEntryData)list.get(0)).getPubTime();
- }
- else
- {
+ } else {
return null;
}
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
- public void moveWeblogCategoryContents(String srcId, String destId)
- throws RollerException
- {
- WeblogCategoryData srcCd =
- (WeblogCategoryData) mStrategy.load(
- srcId, WeblogCategoryData.class);
-
- WeblogCategoryData destCd =
- (WeblogCategoryData) mStrategy.load(
- destId, WeblogCategoryData.class);
-
- if (destCd.descendentOf(srcCd))
- {
- throw new RollerException(
- "ERROR cannot move parent category into it's own child");
- }
-
- // get all entries in category and subcats
- List results = retrieveWeblogEntries(srcCd, true);
-
- // Loop through entries in src cat, assign them to dest cat
- Iterator iter = results.iterator();
- WebsiteData website = destCd.getWebsite();
- while (iter.hasNext())
- {
- WeblogEntryData entry = (WeblogEntryData) iter.next();
- entry.setCategory(destCd);
- entry.setWebsite(website);
- entry.save();
- }
-
- // Make sure website's default and bloggerapi categories
- // are valid after the move
-
- if (srcCd.getWebsite().getDefaultCategory().getId().equals(srcId)
- || srcCd.getWebsite().getDefaultCategory().descendentOf(srcCd))
- {
- srcCd.getWebsite().setDefaultCategory(destCd);
- }
-
- if (srcCd.getWebsite().getBloggerCategory().getId().equals(srcId)
- || srcCd.getWebsite().getBloggerCategory().descendentOf(srcCd))
- {
- srcCd.getWebsite().setBloggerCategory(destCd);
- }
- }
- public List retrieveWeblogEntries(WeblogCategoryData cat, boolean subcats)
- throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+
+ public List retrieveWeblogEntries(WeblogCategoryData cat, boolean subcats)
+ throws RollerException {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
List entries = new LinkedList();
- if (subcats)
- {
+ if (subcats) {
// Get entries in subcategories
- Criteria assocsQuery =
- session.createCriteria(WeblogCategoryAssoc.class);
- assocsQuery.add(Expression.eq("ancestorCategory", cat));
- Iterator assocs = assocsQuery.list().iterator();
- while (assocs.hasNext())
- {
+ Criteria assocsQuery =
+ session.createCriteria(WeblogCategoryAssoc.class);
+ assocsQuery.add(Expression.eq("ancestorCategory", cat));
+ Iterator assocs = assocsQuery.list().iterator();
+ while (assocs.hasNext()) {
WeblogCategoryAssoc assoc = (WeblogCategoryAssoc)assocs.next();
- Criteria entriesQuery =
- session.createCriteria(WeblogEntryData.class);
+ Criteria entriesQuery =
+ session.createCriteria(WeblogEntryData.class);
entriesQuery.add(
- Expression.eq("category", assoc.getCategory()));
+ Expression.eq("category", assoc.getCategory()));
Iterator entryIter = entriesQuery.list().iterator();
- while (entryIter.hasNext())
- {
+ while (entryIter.hasNext()) {
WeblogEntryData entry = (WeblogEntryData)entryIter.next();
entries.add(entry);
}
- }
+ }
}
// Get entries in category
- Criteria entriesQuery =
- session.createCriteria(WeblogEntryData.class);
- entriesQuery.add(Expression.eq("category", cat));
+ Criteria entriesQuery =
+ session.createCriteria(WeblogEntryData.class);
+ entriesQuery.add(Expression.eq("category", cat));
Iterator entryIter = entriesQuery.list().iterator();
- while (entryIter.hasNext())
- {
+ while (entryIter.hasNext()) {
WeblogEntryData entry = (WeblogEntryData)entryIter.next();
entries.add(entry);
}
return entries;
- }
- catch (HibernateException e)
- {
- throw new RollerException(e);
- }
- }
-
- public void removeWeblogEntryContents(WeblogEntryData entry)
- throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
-
- // remove referers
- Criteria refererQuery = session.createCriteria(RefererData.class);
- refererQuery.add(Expression.eq("weblogEntry", entry));
- List entries = refererQuery.list();
- for (Iterator iter = entries.iterator(); iter.hasNext();)
- {
- RefererData referer = (RefererData) iter.next();
- referer.remove();
- }
- removeCommentsForEntry(entry.getId());
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
- public String createAnchor(WeblogEntryData entry) throws RollerException
- {
- try
- {
+
+
+
+ public String createAnchor(WeblogEntryData entry) throws RollerException {
+ try {
// Check for uniqueness of anchor
String base = entry.createAnchorBase();
String name = base;
int count = 0;
-
- while (true)
- {
- if (count > 0)
- {
+
+ while (true) {
+ if (count > 0) {
name = base + count;
}
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogEntryData.class);
criteria.add(Expression.eq("website", entry.getWebsite()));
criteria.add(Expression.eq("anchor", name));
-
+
List results = criteria.list();
- if (results.size() < 1)
- {
+ if (results.size() < 1) {
break;
- }
- else
- {
+ } else {
count++;
}
}
return name;
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
- public boolean isDuplicateWeblogCategoryName(WeblogCategoryData cat)
- throws RollerException
- {
+
+ public boolean isDuplicateWeblogCategoryName(WeblogCategoryData cat)
+ throws RollerException {
// ensure that no sibling categories share the same name
- WeblogCategoryData parent =
- null == cat.getId() ? (WeblogCategoryData)cat.getNewParent() : cat.getParent();
-
+ WeblogCategoryData parent =
+ null == cat.getId() ? (WeblogCategoryData)cat.getNewParent() : cat.getParent();
+
if (null != parent) // don't worry about root
{
List sameNames;
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.createAlias("category", "c");
criteria.add(Expression.eq("c.name", cat.getName()));
criteria.add(Expression.eq("ancestorCategory", parent));
criteria.add(Expression.eq("relation", Assoc.PARENT));
sameNames = criteria.list();
+ } catch (HibernateException e) {
+ throw new RollerException(e);
+ }
+ if (sameNames.size() > 1) {
+ return true;
}
- catch (HibernateException e)
- {
- throw new RollerException(e);
- }
- if (sameNames.size() > 1)
- {
- return true;
- }
}
return false;
}
-
- public boolean isWeblogCategoryInUse(WeblogCategoryData cat)
- throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+ public boolean isWeblogCategoryInUse(WeblogCategoryData cat)
+ throws RollerException {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogEntryData.class);
- criteria.add(Expression.eq("category", cat));
- criteria.setMaxResults(1);
+ criteria.add(Expression.eq("category", cat));
+ criteria.setMaxResults(1);
int entryCount = criteria.list().size();
- if (entryCount > 0)
- {
+ if (entryCount > 0) {
return true;
}
Iterator cats = cat.getWeblogCategories().iterator();
- while (cats.hasNext())
- {
+ while (cats.hasNext()) {
WeblogCategoryData childCat = (WeblogCategoryData)cats.next();
- if (childCat.isInUse())
- {
+ if (childCat.isInUse()) {
return true;
}
}
- if (cat.getWebsite().getBloggerCategory().equals(cat))
- {
+ if (cat.getWebsite().getBloggerCategory().equals(cat)) {
return true;
}
- if (cat.getWebsite().getDefaultCategory().equals(cat))
- {
+ if (cat.getWebsite().getDefaultCategory().equals(cat)) {
return true;
}
return false;
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
+
public boolean isDescendentOf(
WeblogCategoryData child, WeblogCategoryData ancestor)
- throws RollerException
- {
+ throws RollerException {
boolean ret = false;
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.add(Expression.eq("category", child));
criteria.add(Expression.eq("ancestorCategory", ancestor));
ret = criteria.list().size() > 0;
- }
- catch (HibernateException e)
- {
- throw new RollerException(e);
+ } catch (HibernateException e) {
+ throw new RollerException(e);
}
return ret;
}
- public Assoc getWeblogCategoryParentAssoc(WeblogCategoryData cat)
- throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ public Assoc getWeblogCategoryParentAssoc(WeblogCategoryData cat)
+ throws RollerException {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.add(Expression.eq("category", cat));
criteria.add(Expression.eq("relation", Assoc.PARENT));
List parents = criteria.list();
- if (parents.size() > 1)
- {
+ if (parents.size() > 1) {
throw new RollerException("ERROR: more than one parent");
- }
- else if (parents.size() == 1)
- {
+ } else if (parents.size() == 1) {
return (Assoc) parents.get(0);
- }
- else
- {
+ } else {
return null;
}
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
- public List getWeblogCategoryChildAssocs(WeblogCategoryData cat)
- throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+ public List getWeblogCategoryChildAssocs(WeblogCategoryData cat)
+ throws RollerException {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.add(Expression.eq("ancestorCategory", cat));
criteria.add(Expression.eq("relation", Assoc.PARENT));
return criteria.list();
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
- public List getAllWeblogCategoryDecscendentAssocs(WeblogCategoryData cat)
- throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+ public List getAllWeblogCategoryDecscendentAssocs(WeblogCategoryData cat)
+ throws RollerException {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.add(Expression.eq("ancestorCategory", cat));
return criteria.list();
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
-
- public List getWeblogCategoryAncestorAssocs(WeblogCategoryData cat)
- throws RollerException
- {
- try
- {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+
+ public List getWeblogCategoryAncestorAssocs(WeblogCategoryData cat)
+ throws RollerException {
+ try {
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class);
criteria.add(Expression.eq("category", cat));
return criteria.list();
- }
- catch (HibernateException e)
- {
+ } catch (HibernateException e) {
throw new RollerException(e);
}
}
public List getComments(
- WebsiteData website,
- WeblogEntryData entry,
- String searchString,
- Date startDate,
- Date endDate,
- Boolean pending,
- Boolean approved,
- Boolean spam,
- boolean reverseChrono,
- int offset,
- int length
- ) throws RollerException {
-
+ WebsiteData website,
+ WeblogEntryData entry,
+ String searchString,
+ Date startDate,
+ Date endDate,
+ Boolean pending,
+ Boolean approved,
+ Boolean spam,
+ boolean reverseChrono,
+ int offset,
+ int length
+ ) throws RollerException {
+
try {
- Session session = ((HibernateStrategy)mStrategy).getSession();
+ // begin transaction
+ this.strategy.getSession().beginTransaction();
+
+ Session session = ((HibernatePersistenceStrategy)this.strategy).getSession();
Criteria criteria = session.createCriteria(CommentData.class);
if (entry != null) {
criteria.add(Expression.eq("weblogEntry", entry));
- }
- else if (website != null) {
+ } else if (website != null) {
criteria.createAlias("weblogEntry","e");
criteria.add(Expression.eq("e.website", website));
}
if (searchString != null) {
criteria.add(Expression.disjunction()
- .add(Expression.like("url", searchString, MatchMode.ANYWHERE))
- .add(Expression.like("content", searchString, MatchMode.ANYWHERE)));
+ .add(Expression.like("url", searchString, MatchMode.ANYWHERE))
+ .add(Expression.like("content", searchString, MatchMode.ANYWHERE)));
}
if (startDate != null) {
@@ -741,7 +930,7 @@
}
if (length != -1) {
- criteria.setMaxResults(offset + length);
+ criteria.setMaxResults(offset + length);
}
if (reverseChrono) {
@@ -749,7 +938,7 @@
} else {
criteria.addOrder(Order.asc("postTime"));
}
-
+
List comments = criteria.list();
if (offset==0 || comments.size() < offset) {
return comments;
@@ -761,10 +950,251 @@
return range;
} catch (HibernateException e) {
- mLogger.error(e);
+ log.error(e);
throw new RollerException(e);
}
}
+
+
+ public WeblogCategoryData retrieveWeblogCategory(String id)
+ throws RollerException {
+ return (WeblogCategoryData) this.strategy.load(
+ id,
+ WeblogCategoryData.class);
+ }
+
+ //--------------------------------------------- WeblogCategoryData Queries
+
+ public WeblogCategoryData getWeblogCategoryByPath(
+ WebsiteData website, String categoryPath) throws RollerException {
+ return getWeblogCategoryByPath(website, null, categoryPath);
+ }
+
+ public String getPath(WeblogCategoryData category) throws RollerException {
+ if (null == category.getParent()) {
+ return "/";
+ } else {
+ String parentPath = getPath(category.getParent());
+ parentPath = "/".equals(parentPath) ? "" : parentPath;
+ return parentPath + "/" + category.getName();
+ }
+ }
+
+ public WeblogCategoryData getWeblogCategoryByPath(
+ WebsiteData website, WeblogCategoryData category, String path)
+ throws RollerException {
+ final Iterator cats;
+ final String[] pathArray = Utilities.stringToStringArray(path, "/");
+
+ if (category == null && (null == path || "".equals(path.trim()))) {
+ throw new RollerException("Bad arguments.");
+ }
+
+ if (path.trim().equals("/")) {
+ return getRootWeblogCategory(website);
+ } else if (category == null || path.trim().startsWith("/")) {
+ cats = getRootWeblogCategory(website).getWeblogCategories().iterator();
+ } else {
+ cats = category.getWeblogCategories().iterator();
+ }
+
+ while (cats.hasNext()) {
+ WeblogCategoryData possibleMatch = (WeblogCategoryData)cats.next();
+ if (possibleMatch.getName().equals(pathArray[0])) {
+ if (pathArray.length == 1) {
+ return possibleMatch;
+ } else {
+ String[] subpath = new String[pathArray.length - 1];
+ System.arraycopy(pathArray, 1, subpath, 0, subpath.length);
+
+ String pathString= Utilities.stringArrayToString(subpath,"/");
+ return getWeblogCategoryByPath(website, possibleMatch, pathString);
+ }
+ }
+ }
+
+ // The category did not match and neither did any sub-categories
+ return null;
+ }
+
+ //----------------------------------------------- WeblogCategoryAssoc CRUD
+
+
+ public WeblogCategoryAssoc retrieveWeblogCategoryAssoc(String id) throws RollerException {
+ return (WeblogCategoryAssoc)this.strategy.load(id, WeblogCategoryAssoc.class);
+ }
+
+
+ public CommentData retrieveComment(String id) throws RollerException {
+ return (CommentData) this.strategy.load(id, CommentData.class);
+ }
+
+ //--------------------------------------------------- WeblogEntryData CRUD
+
+ public WeblogEntryData retrieveWeblogEntry(String id)
+ throws RollerException {
+ return (WeblogEntryData) this.strategy.load(
+ id, WeblogEntryData.class);
+ }
+
+
+ public List getWeblogEntries(
+ WebsiteData website,
+ Date startDate,
+ Date endDate,
+ String catName,
+ String status,
+ String sortby,
+ int offset,
+ int range) throws RollerException {
+ List filtered = new ArrayList();
+ List entries = getWeblogEntries(
+ website,
+ startDate,
+ endDate,
+ catName,
+ status,
+ sortby,
+ new Integer(offset + range));
+ if (entries.size() < offset) {
+ return entries;
+ }
+ for (int i=offset; i<entries.size(); i++) {
+ filtered.add(entries.get(i));
+ }
+ return filtered;
+ }
+
+ /**
+ * Gets the Date of the latest Entry publish time, before the end of today,
+ * for all WeblogEntries
+ */
+ public Date getWeblogLastPublishTime(WebsiteData website)
+ throws RollerException {
+ return getWeblogLastPublishTime(website, null);
+ }
+
+ public Map getWeblogEntryObjectMap(
+ WebsiteData website,
+ Date startDate,
+ Date endDate,
+ String catName,
+ String status,
+ Integer maxEntries) throws RollerException {
+ return getWeblogEntryMap(
+ website,
+ startDate,
+ endDate,
+ catName,
+ status,
+ maxEntries,
+ false);
+ }
+
+ public Map getWeblogEntryStringMap(
+ WebsiteData website,
+ Date startDate,
+ Date endDate,
+ String catName,
+ String status,
+ Integer maxEntries) throws RollerException {
+ return getWeblogEntryMap(
+ website,
+ startDate,
+ endDate,
+ catName,
+ status,
+ maxEntries,
+ true);
+ }
+
+ private Map getWeblogEntryMap(
+ WebsiteData website,
+ Date startDate,
+ Date endDate,
+ String catName,
+ String status,
+ Integer maxEntries,
+ boolean stringsOnly) throws RollerException {
+ TreeMap map = new TreeMap(reverseComparator);
+
+ List entries = getWeblogEntries(
+ website,
+ startDate,
+ endDate,
+ catName,
+ status,
+ null,
+ maxEntries);
+
+ Calendar cal = Calendar.getInstance();
+ if (website != null) {
+ cal.setTimeZone(website.getTimeZoneInstance());
+ }
+
+ for (Iterator wbItr = entries.iterator(); wbItr.hasNext();) {
+ WeblogEntryData entry = (WeblogEntryData) wbItr.next();
+ Date sDate = DateUtil.getNoonOfDay(entry.getPubTime(), cal);
+ if (stringsOnly) {
+ if (map.get(sDate) == null)
+ map.put(sDate, formatter.format(sDate));
+ } else {
+ List dayEntries = (List) map.get(sDate);
+ if (dayEntries == null) {
+ dayEntries = new ArrayList();
+ map.put(sDate, dayEntries);
+ }
+ dayEntries.add(entry);
+ }
+ }
+ return map;
+ }
+
+ public List getNextEntries(
+ WeblogEntryData current, String catName, int maxEntries)
+ throws RollerException {
+ return getNextPrevEntries(current, catName, maxEntries, true);
+ }
+
+ public List getPreviousEntries(
+ WeblogEntryData current, String catName, int maxEntries)
+ throws RollerException {
+ return getNextPrevEntries(current, catName, maxEntries, false);
+ }
+
+ public WeblogEntryData getNextEntry(WeblogEntryData current, String catName)
+ throws RollerException {
+ WeblogEntryData entry = null;
+ List entryList = getNextEntries(current, catName, 1);
+ if (entryList != null && entryList.size() > 0) {
+ entry = (WeblogEntryData)entryList.get(0);
+ }
+ return entry;
+ }
+
+ public WeblogEntryData getPreviousEntry(WeblogEntryData current, String catName)
+ throws RollerException {
+ WeblogEntryData entry = null;
+ List entryList = getPreviousEntries(current, catName, 1);
+ if (entryList != null && entryList.size() > 0) {
+ entry = (WeblogEntryData)entryList.get(0);
+ }
+ return entry;
+ }
+
+ /**
+ * Get absolute URL to this website.
+ * @return Absolute URL to this website.
+ */
+ public String getUrl(WebsiteData site, String contextUrl) {
+ String url =
+ Utilities.escapeHTML(contextUrl + "/page/" + site.getHandle());
+ return url;
+ }
+
+
+ public void release() {}
+
}
Modified: incubator/roller/branches/roller-newbackend/src/org/roller/business/search/operations/RebuildWebsiteIndexOperation.java
URL: http://svn.apache.org/viewcvs/incubator/roller/branches/roller-newbackend/src/org/roller/business/search/operations/RebuildWebsiteIndexOperation.java?rev=392618&r1=392617&r2=392618&view=diff
==============================================================================
--- incubator/roller/branches/roller-newbackend/src/org/roller/business/search/operations/RebuildWebsiteIndexOperation.java (original)
+++ incubator/roller/branches/roller-newbackend/src/org/roller/business/search/operations/RebuildWebsiteIndexOperation.java Sat Apr 8 15:36:25 2006
@@ -104,7 +104,6 @@
Roller roller = RollerFactory.getRoller();
try
{
- roller.begin();
if (writer != null)
{
WeblogManager weblogManager = roller.getWeblogManager();