protected void activate(ComponentContext context) { BundleContext bundleContext = context.getBundleContext(); tracker = new ExternalRepositoryProcessorTracker( bundleContext, ExternalRepositoryProcessor.class.getName(), null); tracker.open(); }
/** * {@inheritDoc} * * @see * org.apache.sling.api.servlets.SlingSafeMethodsServlet#doGet(org.apache.sling.api.SlingHttpServletRequest, * org.apache.sling.api.SlingHttpServletResponse) */ @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { try { // Grab the search node. Node node = request.getResource().adaptTo(Node.class); // Grab the node that holds the repository information. Node proxyNode = DocProxyUtils.getProxyNode(node); // Grab the correct processor String type = proxyNode.getProperty(REPOSITORY_PROCESSOR).getString(); ExternalRepositoryProcessor processor = tracker.getProcessorByType(type); if (processor == null) { LOGGER.warn("No processor found for type - {}", type); response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not handle this repository type."); return; } // Handle properties. Map<String, Object> searchProperties = new HashMap<String, Object>(); handleProperties(searchProperties, node, request); // Process search Iterator<ExternalDocumentResult> results = processor.search(proxyNode, searchProperties); // Do the default search paging. long toSkip = SearchUtil.getPaging(request, -1); while (toSkip > 0) { if (results.hasNext()) { results.next(); toSkip--; } else { throw new NoSuchElementException(); } } response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); ExtendedJSONWriter write = new ExtendedJSONWriter(response.getWriter()); write.array(); long nitems = SearchUtil.longRequestParameter( request, SearchConstants.PARAMS_ITEMS_PER_PAGE, SearchConstants.DEFAULT_PAGED_ITEMS); for (long i = 0; i < nitems && results.hasNext(); i++) { ExternalDocumentResult result = results.next(); DocProxyUtils.writeMetaData(write, result); } write.endArray(); } catch (RepositoryException e) { LOGGER.error("Got a repository exception when trying to grab search node information.", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to perform search."); } catch (JSONException e) { LOGGER.error("Got a JSON exception when trying to grab search node information.", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Failed to perform search."); } catch (DocProxyException e) { LOGGER.error("Got a DocProxy exception when trying to grab search node information.", e); response.sendError(e.getCode(), e.getMessage()); } }
protected void deactivate(ComponentContext context) { if (tracker != null) { tracker.close(); tracker = null; } }