Search in sources :

Example 36 with Page

use of com.day.cq.wcm.api.Page in project aem-core-wcm-components by Adobe-Marketing-Cloud.

the class CoreComponentsMockTest method testLinkHandling.

/**
 * Tests a component with link handling that depends on the presence of a path processor implementation.
 */
@Test
void testLinkHandling() {
    Page page = context.create().page("/content/test");
    Resource resource = context.create().resource(page, "title", "sling:resourceType", "core/wcm/components/title/v3/title", "linkURL", "https://example.com");
    context.currentResource(resource);
    Title title = context.request().adaptTo(Title.class);
    assertNotNull(title, "Unable instantiate title component");
    assertNotNull(title.getLink(), "Missing link");
    assertEquals("https://example.com", title.getLink().getURL());
}
Also used : Resource(org.apache.sling.api.resource.Resource) Title(com.adobe.cq.wcm.core.components.models.Title) Page(com.day.cq.wcm.api.Page) Test(org.junit.jupiter.api.Test)

Example 37 with Page

use of com.day.cq.wcm.api.Page in project aem-core-wcm-components by Adobe-Marketing-Cloud.

the class SearchResultServlet method getResults.

/**
 * Gets the search results.
 *
 * @param request The search request.
 * @param searchComponent The search component.
 * @param pageManager A PageManager.
 * @return List of search results.
 */
@NotNull
private List<ListItem> getResults(@NotNull final SlingHttpServletRequest request, @NotNull final Search searchComponent, @NotNull final PageManager pageManager) {
    List<ListItem> results = new ArrayList<>();
    String fulltext = request.getParameter(PARAM_FULLTEXT);
    if (fulltext == null || fulltext.length() < searchComponent.getSearchTermMinimumLength()) {
        return results;
    }
    long resultsOffset = Optional.ofNullable(request.getParameter(PARAM_RESULTS_OFFSET)).map(Long::parseLong).orElse(0L);
    Map<String, String> predicatesMap = new HashMap<>();
    predicatesMap.put(FulltextPredicateEvaluator.FULLTEXT, fulltext);
    predicatesMap.put(PathPredicateEvaluator.PATH, searchComponent.getSearchRootPagePath());
    predicatesMap.put(TypePredicateEvaluator.TYPE, NameConstants.NT_PAGE);
    PredicateGroup predicates = PredicateConverter.createPredicates(predicatesMap);
    ResourceResolver resourceResolver = request.getResource().getResourceResolver();
    Query query = queryBuilder.createQuery(predicates, resourceResolver.adaptTo(Session.class));
    if (searchComponent.getResultsSize() != 0) {
        query.setHitsPerPage(searchComponent.getResultsSize());
    }
    if (resultsOffset != 0) {
        query.setStart(resultsOffset);
    }
    SearchResult searchResult = query.getResult();
    LinkHandler linkHandler = request.adaptTo(LinkHandler.class);
    // Query builder has a leaking resource resolver, so the following work around is required.
    ResourceResolver leakingResourceResolver = null;
    try {
        Iterator<Resource> resourceIterator = searchResult.getResources();
        while (resourceIterator.hasNext()) {
            Resource resource = resourceIterator.next();
            // Get a reference to QB's leaking resource resolver
            if (leakingResourceResolver == null) {
                leakingResourceResolver = resource.getResourceResolver();
            }
            Optional.of(resource).map(res -> resourceResolver.getResource(res.getPath())).map(pageManager::getContainingPage).map(page -> new PageListItemImpl(linkHandler, page, searchComponent.getId(), null)).ifPresent(results::add);
        }
    } finally {
        if (leakingResourceResolver != null) {
            leakingResourceResolver.close();
        }
    }
    return results;
}
Also used : ResourceResolver(org.apache.sling.api.resource.ResourceResolver) ScriptHelper(org.apache.sling.scripting.core.ScriptHelper) TypePredicateEvaluator(com.day.cq.search.eval.TypePredicateEvaluator) StringUtils(org.apache.commons.lang3.StringUtils) Page(com.day.cq.wcm.api.Page) SlingBindings(org.apache.sling.api.scripting.SlingBindings) SlingHttpServletRequest(org.apache.sling.api.SlingHttpServletRequest) SearchResult(com.day.cq.search.result.SearchResult) PredicateConverter(com.day.cq.search.PredicateConverter) Map(java.util.Map) PageListItemImpl(com.adobe.cq.wcm.core.components.internal.models.v1.PageListItemImpl) Search(com.adobe.cq.wcm.core.components.models.Search) PN_FRAGMENT_VARIATION_PATH(com.adobe.cq.wcm.core.components.models.ExperienceFragment.PN_FRAGMENT_VARIATION_PATH) PathPredicateEvaluator(com.day.cq.search.eval.PathPredicateEvaluator) Session(javax.jcr.Session) Servlet(javax.servlet.Servlet) SlingHttpServletResponse(org.apache.sling.api.SlingHttpServletResponse) StandardCharsets(java.nio.charset.StandardCharsets) BundleContext(org.osgi.framework.BundleContext) Objects(java.util.Objects) PageManager(com.day.cq.wcm.api.PageManager) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) Query(com.day.cq.search.Query) Optional(java.util.Optional) SlingSafeMethodsServlet(org.apache.sling.api.servlets.SlingSafeMethodsServlet) NotNull(org.jetbrains.annotations.NotNull) FulltextPredicateEvaluator(com.day.cq.search.eval.FulltextPredicateEvaluator) ModelFactory(org.apache.sling.models.factory.ModelFactory) LinkHandler(com.adobe.cq.wcm.core.components.internal.link.LinkHandler) HashMap(java.util.HashMap) LanguageManager(com.day.cq.wcm.api.LanguageManager) ArrayList(java.util.ArrayList) Component(org.osgi.service.component.annotations.Component) StreamSupport(java.util.stream.StreamSupport) Activate(org.osgi.service.component.annotations.Activate) SearchImpl(com.adobe.cq.wcm.core.components.internal.models.v1.SearchImpl) QueryBuilder(com.day.cq.search.QueryBuilder) Iterator(java.util.Iterator) ListItem(com.adobe.cq.wcm.core.components.models.ListItem) HttpServletResponse(javax.servlet.http.HttpServletResponse) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Resource(org.apache.sling.api.resource.Resource) IOException(java.io.IOException) LiveRelationshipManager(com.day.cq.wcm.msm.api.LiveRelationshipManager) LocalizationUtils(com.adobe.cq.wcm.core.components.internal.LocalizationUtils) PredicateGroup(com.day.cq.search.PredicateGroup) Template(com.day.cq.wcm.api.Template) NameConstants(com.day.cq.wcm.api.NameConstants) Reference(org.osgi.service.component.annotations.Reference) Query(com.day.cq.search.Query) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Resource(org.apache.sling.api.resource.Resource) SearchResult(com.day.cq.search.result.SearchResult) PredicateGroup(com.day.cq.search.PredicateGroup) PageListItemImpl(com.adobe.cq.wcm.core.components.internal.models.v1.PageListItemImpl) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) ListItem(com.adobe.cq.wcm.core.components.models.ListItem) LinkHandler(com.adobe.cq.wcm.core.components.internal.link.LinkHandler) Session(javax.jcr.Session) NotNull(org.jetbrains.annotations.NotNull)

Example 38 with Page

use of com.day.cq.wcm.api.Page in project aem-core-wcm-components by Adobe-Marketing-Cloud.

the class LanguageNavigationImpl method getLocalizedPage.

private Page getLocalizedPage(Page page, Page languageRoot) {
    Page localizedPage;
    String path = languageRoot.getPath();
    String relativePath = page.getPath();
    if (relativePath.startsWith(path)) {
        localizedPage = page;
    } else {
        String separator = "/";
        int i = relativePath.indexOf(separator);
        int occurrence = StringUtils.countMatches(path, separator) + 1;
        while (--occurrence > 0 && i != -1) {
            i = relativePath.indexOf(separator, i + 1);
        }
        relativePath = (i > 0) ? relativePath.substring(i) : "";
        path = path.concat(relativePath);
        PageManager pageManager = page.getPageManager();
        localizedPage = pageManager.getPage(path);
    }
    return localizedPage;
}
Also used : PageManager(com.day.cq.wcm.api.PageManager) Page(com.day.cq.wcm.api.Page)

Example 39 with Page

use of com.day.cq.wcm.api.Page in project aem-core-wcm-components by Adobe-Marketing-Cloud.

the class ListImpl method getSearchListItems.

/**
 * Get the list items if using the search source type.
 *
 * @return The search list items.
 */
private Stream<Page> getSearchListItems() {
    Optional<Page> searchRoot = getRootPage(PN_SEARCH_IN);
    String query = properties.get(PN_SEARCH_QUERY, String.class);
    if (!StringUtils.isBlank(query) && searchRoot.isPresent()) {
        SimpleSearch search = resource.adaptTo(SimpleSearch.class);
        if (search != null) {
            search.setQuery(query);
            search.setSearchIn(searchRoot.get().getPath());
            search.addPredicate(new Predicate("type", "type").set("type", NameConstants.NT_PAGE));
            int limit = properties.get(PN_SEARCH_LIMIT, SEARCH_LIMIT_DEFAULT);
            search.setHitsPerPage(limit);
            return safeGetSearchResult(search).map(SearchResult::getResources).map(it -> (Iterable<Resource>) () -> it).map(it -> StreamSupport.stream(it.spliterator(), false)).orElseGet(Stream::empty).filter(Objects::nonNull).map(currentPage.getPageManager()::getContainingPage).filter(Objects::nonNull);
        }
    }
    return Stream.empty();
}
Also used : ValueMap(org.apache.sling.api.resource.ValueMap) JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) Arrays(java.util.Arrays) LoggerFactory(org.slf4j.LoggerFactory) ArrayUtils(org.apache.commons.lang3.ArrayUtils) StringUtils(org.apache.commons.lang3.StringUtils) Page(com.day.cq.wcm.api.Page) SlingHttpServletRequest(org.apache.sling.api.SlingHttpServletRequest) TagManager(com.day.cq.tagging.TagManager) Style(com.day.cq.wcm.api.designer.Style) SearchResult(com.day.cq.search.result.SearchResult) ScriptVariable(org.apache.sling.models.annotations.injectorspecific.ScriptVariable) RepositoryException(javax.jcr.RepositoryException) Locale(java.util.Locale) ObjectUtils(org.apache.commons.lang3.ObjectUtils) Model(org.apache.sling.models.annotations.Model) StreamSupport(java.util.stream.StreamSupport) Predicate(com.day.cq.search.Predicate) ComponentExporter(com.adobe.cq.export.json.ComponentExporter) Collator(java.text.Collator) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) SimpleSearch(com.day.cq.search.SimpleSearch) List(com.adobe.cq.wcm.core.components.models.List) Collection(java.util.Collection) Resource(org.apache.sling.api.resource.Resource) Collectors(java.util.stream.Collectors) Exporter(org.apache.sling.models.annotations.Exporter) Serializable(java.io.Serializable) Objects(java.util.Objects) Nullable(org.jetbrains.annotations.Nullable) Stream(java.util.stream.Stream) ExporterConstants(com.adobe.cq.export.json.ExporterConstants) NameConstants(com.day.cq.wcm.api.NameConstants) PostConstruct(javax.annotation.PostConstruct) Optional(java.util.Optional) Comparator(java.util.Comparator) NotNull(org.jetbrains.annotations.NotNull) AbstractComponentImpl(com.adobe.cq.wcm.core.components.util.AbstractComponentImpl) SimpleSearch(com.day.cq.search.SimpleSearch) Objects(java.util.Objects) Page(com.day.cq.wcm.api.Page) SearchResult(com.day.cq.search.result.SearchResult) Predicate(com.day.cq.search.Predicate)

Example 40 with Page

use of com.day.cq.wcm.api.Page in project aem-core-wcm-components by Adobe-Marketing-Cloud.

the class RedirectItemImpl method getRedirectPage.

private Page getRedirectPage(@NotNull SlingHttpServletRequest request) {
    Page page = null;
    ResourceResolver resourceResolver = request.getResourceResolver();
    Resource targetResource = resourceResolver.getResource(redirectTarget);
    PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
    if (pageManager != null && targetResource != null) {
        page = pageManager.getContainingPage(targetResource);
    }
    return page;
}
Also used : PageManager(com.day.cq.wcm.api.PageManager) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) Resource(org.apache.sling.api.resource.Resource) Page(com.day.cq.wcm.api.Page)

Aggregations

Page (com.day.cq.wcm.api.Page)100 Resource (org.apache.sling.api.resource.Resource)45 PageManager (com.day.cq.wcm.api.PageManager)34 Test (org.junit.jupiter.api.Test)22 ResourceResolver (org.apache.sling.api.resource.ResourceResolver)18 ValueMap (org.apache.sling.api.resource.ValueMap)15 ArrayList (java.util.ArrayList)13 HashMap (java.util.HashMap)12 SlingBindings (org.apache.sling.api.scripting.SlingBindings)12 NotNull (org.jetbrains.annotations.NotNull)10 Test (org.junit.Test)9 HashSet (java.util.HashSet)6 Map (java.util.Map)6 Optional (java.util.Optional)6 SlingHttpServletRequest (org.apache.sling.api.SlingHttpServletRequest)6 Nullable (org.jetbrains.annotations.Nullable)6 LinkHandler (com.adobe.cq.wcm.core.components.internal.link.LinkHandler)5 Template (com.day.cq.wcm.api.Template)5 StringUtils (org.apache.commons.lang3.StringUtils)5 Before (org.junit.Before)5