If you want to get your list of components inside your project apps folder in the form of json response, then here's a servlet for you.
The servlet is registered at path - /bin/generate/componentsreport to which you need to pass your project folder path (default is /apps) as a query-param and it will output the list of components (their name and path) as a json response.
What this servlet is doing is - it is forming a Predicate Map of Query having the path (apps path from the input you provide) and node type (cq:Component) and using it in QueryBuilder API and fetching the results in form of component paths.
Further it is processing the hits (components path) from the search result to form the json response which you can consume by dong an ajax call.
This is the servlet for it-
package com.aem.community.wf.core.servlets; import org.apache.felix.scr.annotations.Reference; import org.apache.felix.scr.annotations.sling.SlingServlet; import org.apache.sling.api.SlingHttpServletRequest; import org.apache.sling.api.SlingHttpServletResponse; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ResourceResolverFactory; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.servlets.SlingSafeMethodsServlet; import org.apache.sling.commons.json.JSONArray; import org.apache.sling.commons.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.day.cq.search.PredicateGroup; import com.day.cq.search.Query; import com.day.cq.search.QueryBuilder; import com.day.cq.search.result.Hit; import com.day.cq.search.result.SearchResult; import javax.jcr.Session; import java.io.IOException; import java.util.HashMap; import java.util.Map; @SlingServlet(paths = "/bin/generate/componentsreport") public class ComponentQueryServlet extends SlingSafeMethodsServlet { private static final long serialVersionUID = 1L; private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Reference private QueryBuilder builder; @Reference private ResourceResolverFactory resolverFactory; @SuppressWarnings("deprecation") @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException { String compPath = request.getParameter("comppath"); if(compPath == null){ compPath = "/apps"; } long totalMatches = 0; response.setCharacterEncoding("UTF-8"); response.setContentType("application/json"); JSONObject json = new JSONObject(); JSONArray jsonarray = new JSONArray(); JSONObject tempJson; try { ResourceResolver resolver = request.getResourceResolver(); Session session = resolver.adaptTo(Session.class); MapBelow is the sample url to call this servlet by passing apps folder path-map = new HashMap (); map.put("path", compPath); map.put("type", "cq:Component"); map.put("p.offset", "0"); map.put("p.limit", "-1"); Query query = builder.createQuery(PredicateGroup.create(map), session); SearchResult result = query.getResult(); totalMatches = result.getTotalMatches(); String hitpath; Resource compResource; String compTitle; for (Hit hit : result.getHits()) { hitpath = hit.getPath(); tempJson = new JSONObject(); compResource = resolver.getResource(hitpath); if (compResource != null) { ValueMap valueMap = compResource.getValueMap(); compTitle = valueMap.get("jcr:title", String.class); tempJson.put("componentname", compTitle); } tempJson.put("componentpath", hitpath); jsonarray.put(tempJson); } json.put("totalcomponents", totalMatches); json.put("components", jsonarray); logger.info("Total" + totalMatches + "paths were found: \n"); } catch (Exception e) { logger.error("Exception caught: "+e); } response.getWriter().print(json.toString()); } }
http://localhost:4502/bin/generate/componentsreport?comppath=/apps/weretail
And this is the screenshot of the response by hitting above url-
Best Casino Near NYC (New York) - Mapyro
ReplyDeleteFind the best hotel and casino near you on Mapyro. 오산 출장샵 Near me (New titanium wire York) is the closest casino to Manhattan, so you don't have to 하남 출장샵 travel 구미 출장안마 to Manhattan 포항 출장마사지 to