Search in sources :

Example 1 with Hit

use of com.day.cq.search.result.Hit in project aem-core-wcm-components by Adobe-Marketing-Cloud.

the class ListImplTest method testSearchListType.

@Test
public void testSearchListType() throws Exception {
    SearchResult searchResult = mock(SearchResult.class);
    Hit hit = mock(Hit.class);
    when(mockSimpleSearch.getResult()).thenReturn(searchResult);
    when(searchResult.getHits()).thenReturn(Collections.singletonList(hit));
    Resource contentResource = context.currentResource("/content/list/pages/page_1/jcr:content");
    when(hit.getResource()).thenReturn(contentResource);
    Resource resource = context.currentResource("/content/list/listTypes/searchListType");
    slingBindings.put(WCMBindings.PROPERTIES, resource.adaptTo(ValueMap.class));
    slingBindings.put(WCMBindings.CURRENT_STYLE, new MockStyle(resource));
    List list = context.request().adaptTo(List.class);
    assertEquals(1, list.getItems().size());
}
Also used : Hit(com.day.cq.search.result.Hit) ValueMap(org.apache.sling.api.resource.ValueMap) Resource(org.apache.sling.api.resource.Resource) MockStyle(com.adobe.cq.wcm.core.components.context.MockStyle) SearchResult(com.day.cq.search.result.SearchResult) List(com.adobe.cq.wcm.core.components.models.List) Test(org.junit.Test)

Example 2 with Hit

use of com.day.cq.search.result.Hit in project acs-aem-commons by Adobe-Consulting-Services.

the class QueryBuilderViewQuery method execute.

@Override
public Collection<com.day.cq.wcm.core.contentfinder.Hit> execute() {
    final List<com.day.cq.wcm.core.contentfinder.Hit> hits = new ArrayList<com.day.cq.wcm.core.contentfinder.Hit>();
    if (this.query == null) {
        return hits;
    }
    final SearchResult result = this.query.getResult();
    // iterating over the results
    for (Hit hit : result.getHits()) {
        try {
            hits.add(createHit(hit));
        } catch (RepositoryException e) {
            log.error("Could not return required information for Content Finder result: {}", hit.toString());
        }
    }
    return hits;
}
Also used : Hit(com.day.cq.search.result.Hit) ArrayList(java.util.ArrayList) SearchResult(com.day.cq.search.result.SearchResult) RepositoryException(javax.jcr.RepositoryException)

Example 3 with Hit

use of com.day.cq.search.result.Hit in project acs-aem-commons by Adobe-Consulting-Services.

the class QueryHelperImpl method getResourcesFromQueryBuilder.

private List<Resource> getResourcesFromQueryBuilder(ResourceResolver resourceResolver, String[] lines) throws RepositoryException {
    final List<Resource> resources = new ArrayList<>();
    final Map<String, String> params = ParameterUtil.toMap(lines, "=", false, null, true);
    // ensure all results are returned
    if (!params.containsKey("p.limit")) {
        params.put("p.limit", "-1");
    }
    final com.day.cq.search.Query query = queryBuilder.createQuery(PredicateGroup.create(params), resourceResolver.adaptTo(Session.class));
    final List<Hit> hits = query.getResult().getHits();
    for (final Hit hit : hits) {
        resources.add(hit.getResource());
    }
    return resources;
}
Also used : Hit(com.day.cq.search.result.Hit) Resource(org.apache.sling.api.resource.Resource) ArrayList(java.util.ArrayList) Session(javax.jcr.Session)

Example 4 with Hit

use of com.day.cq.search.result.Hit in project acs-aem-commons by Adobe-Consulting-Services.

the class LastModifiedOperationImpl method getLastModifiedQuery.

private List<Resource> getLastModifiedQuery(final ResourceResolver resourceResolver, final String userId, final String relativeDateRange, final String nodeType, final String dateProperty, final int limit) {
    final List<Resource> resources = new ArrayList<Resource>();
    final Map<String, String> map = new HashMap<String, String>();
    map.put("path", "/content");
    map.put("type", nodeType);
    map.put("1_property", NameConstants.PN_PAGE_LAST_MOD_BY);
    map.put("1_property.value", userId);
    map.put("relativedaterange.property", dateProperty);
    map.put("relativedaterange.lowerBound", relativeDateRange);
    map.put("orderby", dateProperty);
    map.put("orderby.sort", "desc");
    map.put("p.limit", String.valueOf(limit));
    map.put("p.guessTotal", "true");
    try {
        log.debug("Lastmod QueryBuilder Map: {}", new JSONObject(map).toString(2));
    } catch (JSONException e) {
    // no-op
    }
    final Query query = queryBuilder.createQuery(PredicateGroup.create(map), resourceResolver.adaptTo(Session.class));
    final SearchResult result = query.getResult();
    for (final Hit hit : result.getHits()) {
        try {
            resources.add(hit.getResource());
        } catch (RepositoryException e) {
            log.error("Error resolving Hit to Resource [ {} ]. " + "Likely issue with lucene index being out of sync.", hit.toString());
        }
    }
    return resources;
}
Also used : Query(com.day.cq.search.Query) HashMap(java.util.HashMap) Resource(org.apache.sling.api.resource.Resource) ArrayList(java.util.ArrayList) JSONException(org.apache.sling.commons.json.JSONException) SearchResult(com.day.cq.search.result.SearchResult) RepositoryException(javax.jcr.RepositoryException) Hit(com.day.cq.search.result.Hit) JSONObject(org.apache.sling.commons.json.JSONObject) Session(javax.jcr.Session)

Example 5 with Hit

use of com.day.cq.search.result.Hit in project acs-aem-commons by Adobe-Consulting-Services.

the class EnsureAce method findAcls.

/**
 * Locates by query all the ACLs that the principal participates in.
 *
 * @param resourceResolver
 *            the resource resolver to perform the user management
 * @param principalName
 *            the principal name
 * @param accessControlManager
 *            Jackrabbit access control manager
 * @return a list of ACLs that principal participates in.
 * @throws RepositoryException
 */
private List<JackrabbitAccessControlList> findAcls(ResourceResolver resourceResolver, String principalName, JackrabbitAccessControlManager accessControlManager) throws RepositoryException {
    final Set<String> paths = new HashSet<String>();
    final List<JackrabbitAccessControlList> acls = new ArrayList<JackrabbitAccessControlList>();
    final Map<String, String> params = new HashMap<String, String>();
    params.put("type", AccessControlConstants.NT_REP_ACE);
    params.put("property", AccessControlConstants.REP_PRINCIPAL_NAME);
    params.put("property.value", principalName);
    params.put("p.limit", "-1");
    final Query query = queryBuilder.createQuery(PredicateGroup.create(params), resourceResolver.adaptTo(Session.class));
    // Handle leaking resource resolver in AEM QueryBuilder
    ResourceResolver leakingResourceResolver = null;
    for (final Hit hit : query.getResult().getHits()) {
        try {
            // Handle leaking resource resolver in AEM QueryBuilder
            if (leakingResourceResolver == null) {
                leakingResourceResolver = hit.getResource().getResourceResolver();
            }
            final Resource aceResource = resourceResolver.getResource(hit.getPath());
            // first parent is the rep:policy node
            // second parent (grand-parent) is the content node this ACE controls
            // that is the node we need to use the JackrabbitAccessControlManager api
            final Resource contentResource = aceResource.getParent().getParent();
            if (!paths.contains(contentResource.getPath())) {
                for (AccessControlPolicy policy : accessControlManager.getPolicies(contentResource.getPath())) {
                    if (policy instanceof JackrabbitAccessControlList) {
                        acls.add((JackrabbitAccessControlList) policy);
                        break;
                    }
                }
            }
        } catch (RepositoryException e) {
            log.error("Failed to get resource for query result.", e);
        }
    }
    // Handle leaking resource resolver in AEM QueryBuilder
    if (leakingResourceResolver != null) {
        leakingResourceResolver.close();
    }
    return acls;
}
Also used : AccessControlPolicy(javax.jcr.security.AccessControlPolicy) Query(com.day.cq.search.Query) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Resource(org.apache.sling.api.resource.Resource) RepositoryException(javax.jcr.RepositoryException) JackrabbitAccessControlList(org.apache.jackrabbit.api.security.JackrabbitAccessControlList) Hit(com.day.cq.search.result.Hit) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) HashSet(java.util.HashSet) Session(javax.jcr.Session)

Aggregations

Hit (com.day.cq.search.result.Hit)5 ArrayList (java.util.ArrayList)4 Resource (org.apache.sling.api.resource.Resource)4 SearchResult (com.day.cq.search.result.SearchResult)3 RepositoryException (javax.jcr.RepositoryException)3 Session (javax.jcr.Session)3 Query (com.day.cq.search.Query)2 HashMap (java.util.HashMap)2 MockStyle (com.adobe.cq.wcm.core.components.context.MockStyle)1 List (com.adobe.cq.wcm.core.components.models.List)1 HashSet (java.util.HashSet)1 AccessControlPolicy (javax.jcr.security.AccessControlPolicy)1 JackrabbitAccessControlList (org.apache.jackrabbit.api.security.JackrabbitAccessControlList)1 ResourceResolver (org.apache.sling.api.resource.ResourceResolver)1 ValueMap (org.apache.sling.api.resource.ValueMap)1 JSONException (org.apache.sling.commons.json.JSONException)1 JSONObject (org.apache.sling.commons.json.JSONObject)1 Test (org.junit.Test)1