hibernateweblogmanagerimpl.java
来自「这个weblogging 设计得比较精巧」· Java 代码 · 共 808 行 · 第 1/2 页
JAVA
808 行
{ 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(); List entries = new LinkedList(); 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()) { WeblogCategoryAssoc assoc = (WeblogCategoryAssoc)assocs.next(); Criteria entriesQuery = session.createCriteria(WeblogEntryData.class); entriesQuery.add( Expression.eq("category", assoc.getCategory())); Iterator entryIter = entriesQuery.list().iterator(); 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)); Iterator entryIter = entriesQuery.list().iterator(); while (entryIter.hasNext()) { WeblogEntryData entry = (WeblogEntryData)entryIter.next(); entries.add(entry); } return entries; } catch (HibernateException e) { throw new RollerException(e); } } /** * @see org.roller.model.WeblogManager#removeWeblogEntryContents( * org.roller.pojos.WeblogEntryData) */ 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(); } // remove comments /* Criteria commentQuery = session.createCriteria(RefererData.class); commentQuery.add(Expression.eq("weblogEntry", entry)); List comments = commentQuery.list(); */ List comments = RollerFactory.getRoller().getWeblogManager().getComments(entry.getId(), false); for (Iterator iter = comments.iterator(); iter.hasNext();) { CommentData comment = (CommentData) iter.next(); comment.remove(); } } catch (HibernateException e) { throw new RollerException(e); } } /** * @see org.roller.model.WeblogManager#createAnchor( * org.roller.pojos.WeblogEntryData) */ 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) { name = base + count; } Session session = ((HibernateStrategy)mStrategy).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) { break; } else { count++; } } return name; } catch (HibernateException e) { throw new RollerException(e); } } /** * @see org.roller.model.WeblogManager#checkWeblogCategoryName(org.roller.pojos.WeblogCategoryData) */ 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(); if (null != parent) // don't worry about root { List sameNames; try { Session session = ((HibernateStrategy)mStrategy).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; } } return false; } /** * @see org.roller.model.WeblogManager#isWeblogCategoryInUse(org.roller.pojos.WeblogCategoryData) */ public boolean isWeblogCategoryInUse(WeblogCategoryData cat) throws RollerException { try { Session session = ((HibernateStrategy)mStrategy).getSession(); Criteria criteria = session.createCriteria(WeblogEntryData.class); criteria.add(Expression.eq("category", cat)); criteria.setMaxResults(1); int entryCount = criteria.list().size(); if (entryCount > 0) { return true; } Iterator cats = cat.getWeblogCategories().iterator(); while (cats.hasNext()) { WeblogCategoryData childCat = (WeblogCategoryData)cats.next(); if (childCat.isInUse()) { return true; } } if (cat.getWebsite().getBloggerCategory().equals(cat)) { return true; } if (cat.getWebsite().getDefaultCategory().equals(cat)) { return true; } return false; } catch (HibernateException e) { throw new RollerException(e); } } public boolean isDescendentOf( WeblogCategoryData child, WeblogCategoryData ancestor) throws RollerException { boolean ret = false; try { Session session = ((HibernateStrategy)mStrategy).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); } return ret; } /** * @see org.roller.model.WeblogManager#getWeblogCategoryParentAssoc( * org.roller.pojos.WeblogCategoryData) */ public Assoc getWeblogCategoryParentAssoc(WeblogCategoryData cat) throws RollerException { try { Session session = ((HibernateStrategy)mStrategy).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) { throw new RollerException("ERROR: more than one parent"); } else if (parents.size() == 1) { return (Assoc) parents.get(0); } else { return null; } } catch (HibernateException e) { throw new RollerException(e); } } /** * @see org.roller.model.WeblogManager#getWeblogCategoryChildAssocs( * org.roller.pojos.WeblogCategoryData) */ public List getWeblogCategoryChildAssocs(WeblogCategoryData cat) throws RollerException { try { Session session = ((HibernateStrategy)mStrategy).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) { throw new RollerException(e); } } /** * @see org.roller.model.WeblogManager#getAllWeblogCategoryDecscendentAssocs( * org.roller.pojos.WeblogCategoryData) */ public List getAllWeblogCategoryDecscendentAssocs(WeblogCategoryData cat) throws RollerException { try { Session session = ((HibernateStrategy)mStrategy).getSession(); Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class); criteria.add(Expression.eq("ancestorCategory", cat)); return criteria.list(); } catch (HibernateException e) { throw new RollerException(e); } } /** * @see org.roller.model.WeblogManager#getWeblogCategoryAncestorAssocs(org.roller.pojos.WeblogCategoryData) */ public List getWeblogCategoryAncestorAssocs(WeblogCategoryData cat) throws RollerException { try { Session session = ((HibernateStrategy)mStrategy).getSession(); Criteria criteria = session.createCriteria(WeblogCategoryAssoc.class); criteria.add(Expression.eq("category", cat)); return criteria.list(); } catch (HibernateException e) { throw new RollerException(e); } } /** * Get the maxCount most recent non-spam Comments. If a Website is presented * only Comments for that site will be returned. * * @author lance.lavandowska */ public List getRecentComments(WebsiteData website, int maxCount) throws RollerException { try { Session session = ((HibernateStrategy)mStrategy).getSession(); Criteria criteria = session.createCriteria(CommentData.class); criteria.add( /* no spam ! */ Expression.not(Expression.eq("spam", Boolean.TRUE))); if (website != null) { criteria.createAlias("weblogEntry","e"); criteria.add(Expression.eq("e.website", website)); } criteria.addOrder(Order.desc("postTime")); criteria.setMaxResults(maxCount); return criteria.list(); } catch (HibernateException e) { throw new RollerException(e); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?