protected void activate(ComponentContext context) { BundleContext bundleContext = context.getBundleContext(); tracker = new SearchResultProcessorTracker(bundleContext); tracker.open(); siteSearchResultProcessor = new SiteSearchResultProcessor(); siteSearchResultProcessor.bindSiteService(siteService); }
private void writeNode( SlingHttpServletRequest request, JSONWriter write, Aggregator aggregator, Row row) throws JSONException, RepositoryException { Session session = request.getResourceResolver().adaptTo(Session.class); Node node = RowUtils.getNode(row, session); Node siteNode = node; boolean foundSite = false; while (!siteNode.getPath().equals("/")) { if (siteService.isSite(siteNode)) { foundSite = true; break; } siteNode = siteNode.getParent(); } if (foundSite) { if (node.hasProperty(SLING_RESOURCE_TYPE_PROPERTY)) { String type = node.getProperty(SLING_RESOURCE_TYPE_PROPERTY).getString(); // From looking at the type we determine how we should represent this node. SearchResultProcessor processor = tracker.getSearchResultProcessorByType(type); if (processor != null) { write.object(); write.key("path"); write.value(node.getPath()); write.key("site"); siteSearchResultProcessor.writeNode(write, siteNode); write.key("type"); write.value(node.getProperty(SLING_RESOURCE_TYPE_PROPERTY).getString()); write.key("excerpt"); write.value(RowUtils.getDefaultExcerpt(row)); write.key("data"); processor.writeNode(request, write, aggregator, row); write.endObject(); } else { // No processor found, just dump the properties writeDefaultNode(write, aggregator, row, siteNode, session); } } else { // No type, just dump the properties writeDefaultNode(write, aggregator, row, siteNode, session); } } }
private void writeDefaultNode( JSONWriter write, Aggregator aggregator, Row row, Node siteNode, Session session) throws JSONException, RepositoryException { Node node = RowUtils.getNode(row, session); if (aggregator != null) { aggregator.add(node); } write.object(); write.key("path"); write.value(node.getPath()); write.key("site"); siteSearchResultProcessor.writeNode(write, siteNode); write.key("excerpt"); write.value(RowUtils.getDefaultExcerpt(row)); write.key("data"); ExtendedJSONWriter.writeNodeToWriter(write, node); write.endObject(); }