Search in sources :

Example 96 with Page

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

the class AdaptiveImageServlet method doGet.

@Override
protected void doGet(@NotNull SlingHttpServletRequest request, @NotNull SlingHttpServletResponse response) throws IOException {
    Timer.Context requestDuration = metrics.startDurationRecording();
    try {
        metrics.markServletInvocation();
        RequestPathInfo requestPathInfo = request.getRequestPathInfo();
        List<String> selectorList = selectorToList(requestPathInfo.getSelectorString());
        String suffix = requestPathInfo.getSuffix();
        String imageName = StringUtils.isNotEmpty(suffix) ? FilenameUtils.getName(suffix) : "";
        if (StringUtils.isNotEmpty(suffix)) {
            String suffixExtension = FilenameUtils.getExtension(suffix);
            if (StringUtils.isNotEmpty(suffixExtension)) {
                if (!suffixExtension.equals(requestPathInfo.getExtension())) {
                    LOGGER.error("The suffix part defines a different extension than the request: {}.", suffix);
                    metrics.markImageErrors();
                    response.sendError(HttpServletResponse.SC_NOT_FOUND);
                    return;
                }
            } else {
                LOGGER.error("Invalid suffix: {}.", suffix);
                metrics.markImageErrors();
                response.sendError(HttpServletResponse.SC_NOT_FOUND);
                return;
            }
        }
        Resource component = request.getResource();
        ResourceResolver resourceResolver = request.getResourceResolver();
        if (!component.isResourceType(IMAGE_RESOURCE_TYPE)) {
            // image coming from template; need to switch resource
            Resource componentCandidate = null;
            PageManager pageManager = resourceResolver.adaptTo(PageManager.class);
            if (pageManager != null) {
                Page page = pageManager.getContainingPage(component);
                if (page != null) {
                    Template template = page.getTemplate();
                    if (template != null) {
                        if (StringUtils.isNotEmpty(suffix)) {
                            long lastModifiedSuffix = getRequestLastModifiedSuffix(suffix);
                            String relativeTemplatePath = lastModifiedSuffix == 0 ? // no timestamp info, but extension is valid; get resource name
                            suffix.substring(0, suffix.lastIndexOf('.')) : // timestamp info, get parent path from suffix
                            suffix.substring(0, suffix.lastIndexOf("/" + String.valueOf(lastModifiedSuffix)));
                            String imagePath = ResourceUtil.normalize(template.getPath() + relativeTemplatePath);
                            if (StringUtils.isNotEmpty(imagePath) && !template.getPath().equals(imagePath)) {
                                componentCandidate = resourceResolver.getResource(imagePath);
                            }
                        }
                    }
                }
            }
            if (componentCandidate == null) {
                LOGGER.error("Unable to retrieve an image from this page's template.");
                metrics.markImageErrors();
                response.sendError(HttpServletResponse.SC_NOT_FOUND);
                return;
            }
            component = componentCandidate;
        }
        LinkHandler linkHandler = request.adaptTo(LinkHandler.class);
        Style currentStyle = WCMUtils.getStyle(request);
        Page currentPage = Optional.ofNullable(resourceResolver.adaptTo(PageManager.class)).map(pageManager -> pageManager.getContainingPage(request.getResource())).orElse(null);
        Resource wrappedImageResourceWithInheritance = getWrappedImageResourceWithInheritance(component, linkHandler, currentStyle, currentPage);
        ImageComponent imageComponent = new ImageComponent(wrappedImageResourceWithInheritance);
        if (imageComponent.source == Source.NOCONTENT || imageComponent.source == Source.NONEXISTING) {
            LOGGER.error("Either the image from {} does not have a valid file reference" + " or the containing page does not have a valid featured image", component.getPath());
            metrics.markImageErrors();
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        ValueMap componentProperties = component.getValueMap();
        long lastModifiedEpoch = 0;
        Calendar lastModifiedDate = componentProperties.get(JcrConstants.JCR_LASTMODIFIED, Calendar.class);
        if (lastModifiedDate == null) {
            lastModifiedDate = componentProperties.get(NameConstants.PN_PAGE_LAST_MOD, Calendar.class);
        }
        if (lastModifiedDate != null) {
            lastModifiedEpoch = lastModifiedDate.getTimeInMillis();
        }
        Asset asset = null;
        if (imageComponent.source == Source.ASSET) {
            asset = imageComponent.imageResource.adaptTo(Asset.class);
            if (asset == null) {
                LOGGER.error("Unable to adapt resource {} used by image {} to an asset.", imageComponent.imageResource.getPath(), component.getPath());
                metrics.markImageErrors();
                response.sendError(HttpServletResponse.SC_NOT_FOUND);
                return;
            }
            long assetLastModifiedEpoch = asset.getLastModified();
            if (assetLastModifiedEpoch > lastModifiedEpoch) {
                lastModifiedEpoch = assetLastModifiedEpoch;
            }
        }
        long requestLastModifiedSuffix = getRequestLastModifiedSuffix(suffix);
        if (requestLastModifiedSuffix >= 0 && requestLastModifiedSuffix != lastModifiedEpoch) {
            String redirectLocation = getRedirectLocation(request, lastModifiedEpoch);
            if (StringUtils.isNotEmpty(redirectLocation)) {
                response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
                response.setHeader("Location", redirectLocation);
                return;
            } else {
                LOGGER.error("Unable to determine correct redirect location.");
                metrics.markImageErrors();
                response.setStatus(HttpServletResponse.SC_NOT_FOUND);
                return;
            }
        }
        if (!handleIfModifiedSinceHeader(request, response, lastModifiedEpoch)) {
            Map<String, Integer> transformationMap = getTransformationMap(selectorList, component);
            Integer jpegQualityInPercentage = transformationMap.get(SELECTOR_QUALITY_KEY);
            double quality = jpegQualityInPercentage / 100.0d;
            int resizeWidth = transformationMap.get(SELECTOR_WIDTH_KEY);
            String imageType = getImageType(requestPathInfo.getExtension());
            if (imageComponent.source == Source.FILE) {
                transformAndStreamFile(response, componentProperties, resizeWidth, quality, imageComponent.imageResource, imageType, imageName);
            } else if (imageComponent.source == Source.ASSET) {
                transformAndStreamAsset(response, componentProperties, resizeWidth, quality, asset, imageType, imageName);
            }
            metrics.markImageStreamed();
        }
    } catch (IllegalArgumentException e) {
        LOGGER.error("Invalid image request", e.getMessage());
        metrics.markImageErrors();
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
    } finally {
        requestDuration.stop();
    }
}
Also used : ValueMap(org.apache.sling.api.resource.ValueMap) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) SortedSet(java.util.SortedSet) ResourceUtil(org.apache.sling.api.resource.ResourceUtil) ContentPolicyManager(com.day.cq.wcm.api.policies.ContentPolicyManager) LoggerFactory(org.slf4j.LoggerFactory) DownloadResource(com.day.cq.commons.DownloadResource) StringUtils(org.apache.commons.lang3.StringUtils) Page(com.day.cq.wcm.api.Page) Layer(com.day.image.Layer) SlingHttpServletRequest(org.apache.sling.api.SlingHttpServletRequest) WCMUtils(com.day.cq.wcm.commons.WCMUtils) Matcher(java.util.regex.Matcher) Image(com.adobe.cq.wcm.core.components.models.Image) CharEncoding(org.apache.commons.lang3.CharEncoding) Map(java.util.Map) MimeTypeService(org.apache.sling.commons.mime.MimeTypeService) Splitter(com.google.common.base.Splitter) JcrConstants(org.apache.jackrabbit.JcrConstants) BufferedImage(java.awt.image.BufferedImage) HttpConstants(org.apache.sling.api.servlets.HttpConstants) SlingHttpServletResponse(org.apache.sling.api.SlingHttpServletResponse) DamConstants(com.day.cq.dam.api.DamConstants) CoreResourceWrapper(com.adobe.cq.wcm.core.components.internal.resource.CoreResourceWrapper) PageManager(com.day.cq.wcm.api.PageManager) IOUtils(org.apache.commons.io.IOUtils) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) RequestPathInfo(org.apache.sling.api.request.RequestPathInfo) Optional(java.util.Optional) SlingSafeMethodsServlet(org.apache.sling.api.servlets.SlingSafeMethodsServlet) Pattern(java.util.regex.Pattern) NotNull(org.jetbrains.annotations.NotNull) FilenameUtils(org.apache.commons.io.FilenameUtils) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings) Utils.getWrappedImageResourceWithInheritance(com.adobe.cq.wcm.core.components.internal.Utils.getWrappedImageResourceWithInheritance) Joiner(com.google.common.base.Joiner) ComponentManager(com.day.cq.wcm.api.components.ComponentManager) LinkHandler(com.adobe.cq.wcm.core.components.internal.link.LinkHandler) HashMap(java.util.HashMap) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) Style(com.day.cq.wcm.api.designer.Style) Calendar(java.util.Calendar) Lists(com.google.common.collect.Lists) WCMRenditionPicker(com.day.cq.wcm.foundation.WCMRenditionPicker) Timer(org.apache.sling.commons.metrics.Timer) Asset(com.day.cq.dam.api.Asset) Logger(org.slf4j.Logger) Rendition(com.day.cq.dam.api.Rendition) HttpServletResponse(javax.servlet.http.HttpServletResponse) Resource(org.apache.sling.api.resource.Resource) IOException(java.io.IOException) AbstractImageDelegatingModel(com.adobe.cq.wcm.core.components.internal.models.v1.AbstractImageDelegatingModel) java.awt(java.awt) URLEncoder(java.net.URLEncoder) Template(com.day.cq.wcm.api.Template) NameConstants(com.day.cq.wcm.api.NameConstants) Text(org.apache.jackrabbit.util.Text) AssetStore(com.day.cq.dam.api.handler.store.AssetStore) AssetHandler(com.day.cq.dam.api.handler.AssetHandler) ContentPolicy(com.day.cq.wcm.api.policies.ContentPolicy) ImageResource(com.day.cq.commons.ImageResource) Comparator(java.util.Comparator) InputStream(java.io.InputStream) ValueMap(org.apache.sling.api.resource.ValueMap) Calendar(java.util.Calendar) DownloadResource(com.day.cq.commons.DownloadResource) Resource(org.apache.sling.api.resource.Resource) ImageResource(com.day.cq.commons.ImageResource) Page(com.day.cq.wcm.api.Page) Template(com.day.cq.wcm.api.Template) RequestPathInfo(org.apache.sling.api.request.RequestPathInfo) PageManager(com.day.cq.wcm.api.PageManager) Timer(org.apache.sling.commons.metrics.Timer) ResourceResolver(org.apache.sling.api.resource.ResourceResolver) Style(com.day.cq.wcm.api.designer.Style) Asset(com.day.cq.dam.api.Asset) LinkHandler(com.adobe.cq.wcm.core.components.internal.link.LinkHandler)

Example 97 with Page

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

the class SearchResultServlet method doGet.

@Override
protected void doGet(@NotNull final SlingHttpServletRequest request, @NotNull final SlingHttpServletResponse response) throws IOException {
    Page currentPage = Optional.ofNullable(request.getResourceResolver().adaptTo(PageManager.class)).map(pm -> pm.getContainingPage(request.getResource())).orElse(null);
    if (currentPage != null) {
        SlingBindings bindings = new SlingBindings();
        bindings.setSling(new ScriptHelper(bundleContext, null, request, response));
        request.setAttribute(SlingBindings.class.getName(), bindings);
        Search searchComponent = getSearchComponent(request, currentPage);
        try {
            List<ListItem> results = getResults(request, searchComponent, currentPage.getPageManager());
            response.setContentType("application/json");
            response.setCharacterEncoding(StandardCharsets.UTF_8.name());
            new ObjectMapper().writeValue(response.getWriter(), results);
        } catch (NumberFormatException e) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
        }
    } else {
        response.sendError(HttpServletResponse.SC_NOT_FOUND);
    }
}
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) PageManager(com.day.cq.wcm.api.PageManager) SlingBindings(org.apache.sling.api.scripting.SlingBindings) Search(com.adobe.cq.wcm.core.components.models.Search) Page(com.day.cq.wcm.api.Page) ListItem(com.adobe.cq.wcm.core.components.models.ListItem) ScriptHelper(org.apache.sling.scripting.core.ScriptHelper) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 98 with Page

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

the class SocialMediaHelperImpl method findExperienceFragmentSocialVariation.

private ExperienceFragmentSocialVariation findExperienceFragmentSocialVariation() {
    Page variantPage = currentPage.getPageManager().getPage(variantPath);
    if (variantPage == null)
        return null;
    ExperienceFragmentSocialVariation socialVariant = variantPage.adaptTo(ExperienceFragmentSocialVariation.class);
    return socialVariant;
}
Also used : ExperienceFragmentSocialVariation(com.adobe.cq.xf.social.ExperienceFragmentSocialVariation) Page(com.day.cq.wcm.api.Page)

Example 99 with Page

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

the class CaConfigReferenceProvider method findReferences.

@Override
public List<Reference> findReferences(Resource resource) {
    if (!enabled) {
        return Collections.emptyList();
    }
    List<Reference> references = new ArrayList<>();
    // If the resource is not part of a page: stop the processing
    PageManager pageManager = resource.getResourceResolver().adaptTo(PageManager.class);
    if (pageManager == null) {
        return references;
    }
    Page page = pageManager.getContainingPage(resource);
    if (page == null) {
        return references;
    }
    for (String config : configurationManager.getConfigurationNames()) {
        addCaConfigReference(config, resource, references);
    }
    return references;
}
Also used : PageManager(com.day.cq.wcm.api.PageManager) Reference(com.day.cq.wcm.api.reference.Reference) ArrayList(java.util.ArrayList) Page(com.day.cq.wcm.api.Page)

Example 100 with Page

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

the class PWAImpl method initModel.

@PostConstruct
protected void initModel() {
    PageManager pageManager = resource.getResourceResolver().adaptTo(PageManager.class);
    if (pageManager == null) {
        return;
    }
    Page page = pageManager.getContainingPage(resource);
    while (page != null) {
        Resource contentResource = page.getContentResource();
        if (contentResource != null) {
            ValueMap valueMap = contentResource.getValueMap();
            Boolean isPWAEnabled = valueMap.get(PN_PWA_ENABLED, Boolean.class);
            if (isPWAEnabled != null && isPWAEnabled) {
                this.isEnabled = true;
                this.themeColor = colorToHex(valueMap.get(PN_PWA_THEME_COLOR, ""));
                this.iconPath = valueMap.get(PN_PWA_ICON_PATH, "");
                String startURL = valueMap.get(PN_PWA_START_URL, "");
                this.manifestPath = replaceSuffix(startURL, MANIFEST_NAME);
                String mappingName = page.getPath().replace(CONTENT_PATH, "").replace("/", ".");
                this.serviceWorkerPath = "/" + mappingName + "sw.js";
                break;
            }
        }
        page = page.getParent();
    }
}
Also used : PageManager(com.day.cq.wcm.api.PageManager) ValueMap(org.apache.sling.api.resource.ValueMap) Resource(org.apache.sling.api.resource.Resource) Page(com.day.cq.wcm.api.Page) PostConstruct(javax.annotation.PostConstruct)

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