/* * Copyright 2010-2011 Jasha Joachimsthal * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onehippo.forge.weblogdemo.components; import org.apache.commons.lang.StringUtils; import org.hippoecm.hst.content.beans.query.HstQuery; import org.hippoecm.hst.content.beans.query.HstQueryResult; import org.hippoecm.hst.content.beans.query.exceptions.QueryException; import org.hippoecm.hst.content.beans.standard.HippoBean; import org.hippoecm.hst.content.beans.standard.HippoBeanIterator; import org.hippoecm.hst.content.beans.standard.HippoFolderBean; import org.hippoecm.hst.core.component.HstComponentException; import org.hippoecm.hst.core.component.HstRequest; import org.hippoecm.hst.core.component.HstResponse; import org.onehippo.forge.weblogdemo.beans.Blogpost; import org.onehippo.forge.weblogdemo.hstextensions.ContentRewriterImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * HST component that queries the repository for the newest {@link org.onehippo.forge.weblogdemo.beans.Blogpost} based on the date * Needs HST parameter {@literal blogFolder} that contains the path to the blogposts relative from the site root. * * @author Jasha Joachimsthal */ public class LatestBlog extends BaseSiteComponent { private static final Logger log = LoggerFactory.getLogger(LatestBlog.class); @Override public void doBeforeRender(HstRequest request, HstResponse response) throws HstComponentException { super.doBeforeRender(request, response); HippoBean latestBlog = getLatestBlog(request); if (latestBlog == null) { log.debug("No blogposts"); return; } request.setAttribute("document", latestBlog); request.setAttribute("contentrewriter", new ContentRewriterImpl()); } private HippoBean getLatestBlog(HstRequest request) { String blogFolder = getParameter("blogFolder", request); if (StringUtils.isBlank(blogFolder)) { log.warn("No path configured for parameter 'blogFolder' in HST config. Will not execute query"); return null; } HippoBean blogsFolderBean = getSiteContentBaseBean(request).getBean(blogFolder, HippoFolderBean.class); try { HstQuery hstQuery = getQueryManager().createQuery(blogsFolderBean, Blogpost.class); hstQuery.addOrderByDescending("weblogdemo:date"); hstQuery.setLimit(1); HstQueryResult result = hstQuery.execute(); if (result == null || result.getSize() == 0) { return null; } HippoBeanIterator beanIterator = result.getHippoBeans(); while (beanIterator.hasNext()) { HippoBean bean = beanIterator.next(); if (bean != null) { return bean; } } } catch (QueryException e) { log.warn("Could not execute query to fetch latest blogpost", e); } return null; } }