Search in sources :

Example 1 with ObjectConverter

use of org.hippoecm.hst.content.beans.manager.ObjectConverter in project hippo by NHS-digital-website.

the class FeedListComponent method executeQuery.

/**
 * Copied from uk.nhs.digital.common.components.EventsComponent
 * Added a check for the "website:event" doctype.
 * Runs super if not,
 * Super from org.onehippo.cms7.essentials.components.EssentialsListComponent;
 */
@Override
protected <T extends EssentialsListComponentInfo> Pageable<HippoBean> executeQuery(HstRequest request, T paramInfo, HstQuery query) throws QueryException {
    final FeedListComponentInfo info = getComponentParametersInfo(request);
    final String documentTypes = info.getDocumentTypes();
    if (documentTypes.equals("website:event")) {
        int pageSize = this.getPageSize(request, paramInfo);
        int page = this.getCurrentPage(request);
        query.setLimit(pageSize);
        query.setOffset((page - 1) * pageSize);
        this.applyExcludeScopes(request, query, paramInfo);
        this.buildAndApplyFilters(request, query);
        try {
            // the query coming from the component is manually extended since it needs to consider intervals
            String eventQueryString = query.getQueryAsString(true);
            // appending the query containing filters the on the interval compound
            String queryString = eventQueryString + addIntervalFilter(request);
            HstRequestContext requestContext = request.getRequestContext();
            QueryManager jcrQueryManager = requestContext.getSession().getWorkspace().getQueryManager();
            Query jcrQuery = jcrQueryManager.createQuery(queryString, "xpath");
            QueryResult queryResult = jcrQuery.execute();
            ObjectConverter objectConverter = requestContext.getContentBeansTool().getObjectConverter();
            NodeIterator it = queryResult.getNodes();
            List parentNodes = new ArrayList();
            List<String> parentPath = new ArrayList();
            // For this reason this component needs to fetch the parent node
            while (it.hasNext() && parentPath.size() < pageSize) {
                Node interval = it.nextNode();
                Node eventNode = interval.getParent();
                if (eventNode.getPrimaryNodeType().isNodeType("website:event") && !parentPath.contains(eventNode.getPath())) {
                    parentPath.add(eventNode.getPath());
                    parentNodes.add(objectConverter.getObject(eventNode));
                }
            }
            return this.getPageableFactory().createPageable(parentNodes, page, pageSize);
        } catch (RepositoryException repositoryEx) {
            throw new QueryException(repositoryEx.getMessage());
        } catch (ObjectBeanManagerException converterEx) {
            throw new QueryException(converterEx.getMessage());
        }
    } else {
        return super.executeQuery(request, paramInfo, query);
    }
}
Also used : NodeIterator(javax.jcr.NodeIterator) HstQuery(org.hippoecm.hst.content.beans.query.HstQuery) Query(javax.jcr.query.Query) ObjectConverter(org.hippoecm.hst.content.beans.manager.ObjectConverter) Node(javax.jcr.Node) RepositoryException(javax.jcr.RepositoryException) FeedListComponentInfo(uk.nhs.digital.common.components.info.FeedListComponentInfo) ObjectBeanManagerException(org.hippoecm.hst.content.beans.ObjectBeanManagerException) QueryResult(javax.jcr.query.QueryResult) QueryException(org.hippoecm.hst.content.beans.query.exceptions.QueryException) QueryManager(javax.jcr.query.QueryManager) ValueList(org.onehippo.forge.selection.hst.contentbean.ValueList) HstRequestContext(org.hippoecm.hst.core.request.HstRequestContext)

Example 2 with ObjectConverter

use of org.hippoecm.hst.content.beans.manager.ObjectConverter in project hippo by NHS-digital-website.

the class EventsComponent method executeQuery.

@Override
protected <T extends EssentialsListComponentInfo> Pageable<HippoBean> executeQuery(HstRequest request, T paramInfo, HstQuery query) throws QueryException {
    int pageSize = this.getPageSize(request, paramInfo);
    int page = this.getCurrentPage(request);
    query.setLimit(pageSize);
    query.setOffset((page - 1) * pageSize);
    this.applyExcludeScopes(request, query, paramInfo);
    this.buildAndApplyFilters(request, query);
    try {
        // the query coming from the component is manually extended since it needs to consider intervals
        String eventQueryString = query.getQueryAsString(true);
        // appending the query containing filters the on the interval compound
        String queryString = eventQueryString + addIntervalFilter(request);
        HstRequestContext requestContext = request.getRequestContext();
        QueryManager jcrQueryManager = requestContext.getSession().getWorkspace().getQueryManager();
        Query jcrQuery = jcrQueryManager.createQuery(queryString, "xpath");
        QueryResult queryResult = jcrQuery.execute();
        ObjectConverter objectConverter = requestContext.getContentBeansTool().getObjectConverter();
        NodeIterator it = queryResult.getNodes();
        List parentNodes = new ArrayList();
        List<String> parentPath = new ArrayList();
        // For this reason this component needs to fetch the parent node
        while (it.hasNext() && parentPath.size() < pageSize) {
            Node interval = it.nextNode();
            Node eventNode = interval.getParent();
            if (eventNode.getPrimaryNodeType().isNodeType("website:event") && !parentPath.contains(eventNode.getPath())) {
                parentPath.add(eventNode.getPath());
                parentNodes.add(objectConverter.getObject(eventNode));
            }
        }
        return this.getPageableFactory().createPageable(parentNodes, page, pageSize);
    } catch (RepositoryException repositoryEx) {
        throw new QueryException(repositoryEx.getMessage());
    } catch (ObjectBeanManagerException converterEx) {
        throw new QueryException(converterEx.getMessage());
    }
}
Also used : NodeIterator(javax.jcr.NodeIterator) HstQuery(org.hippoecm.hst.content.beans.query.HstQuery) Query(javax.jcr.query.Query) ObjectConverter(org.hippoecm.hst.content.beans.manager.ObjectConverter) Node(javax.jcr.Node) RepositoryException(javax.jcr.RepositoryException) ObjectBeanManagerException(org.hippoecm.hst.content.beans.ObjectBeanManagerException) QueryResult(javax.jcr.query.QueryResult) QueryException(org.hippoecm.hst.content.beans.query.exceptions.QueryException) QueryManager(javax.jcr.query.QueryManager) ValueList(org.onehippo.forge.selection.hst.contentbean.ValueList) HstRequestContext(org.hippoecm.hst.core.request.HstRequestContext)

Aggregations

Node (javax.jcr.Node)2 NodeIterator (javax.jcr.NodeIterator)2 RepositoryException (javax.jcr.RepositoryException)2 Query (javax.jcr.query.Query)2 QueryManager (javax.jcr.query.QueryManager)2 QueryResult (javax.jcr.query.QueryResult)2 ObjectBeanManagerException (org.hippoecm.hst.content.beans.ObjectBeanManagerException)2 ObjectConverter (org.hippoecm.hst.content.beans.manager.ObjectConverter)2 HstQuery (org.hippoecm.hst.content.beans.query.HstQuery)2 QueryException (org.hippoecm.hst.content.beans.query.exceptions.QueryException)2 HstRequestContext (org.hippoecm.hst.core.request.HstRequestContext)2 ValueList (org.onehippo.forge.selection.hst.contentbean.ValueList)2 FeedListComponentInfo (uk.nhs.digital.common.components.info.FeedListComponentInfo)1