ProjectCardImageServlet.java 5.13 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.projects.api.Project
 *  com.day.cq.commons.ImageHelper
 *  com.day.cq.dam.api.Asset
 *  com.day.cq.dam.api.Rendition
 *  com.day.cq.wcm.api.designer.Style
 *  com.day.cq.wcm.commons.AbstractImageServlet
 *  com.day.cq.wcm.commons.AbstractImageServlet$ImageContext
 *  com.day.cq.wcm.foundation.Image
 *  com.day.image.Layer
 *  javax.jcr.RepositoryException
 *  javax.servlet.ServletException
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.sling.api.SlingHttpServletRequest
 *  org.apache.sling.api.SlingHttpServletResponse
 *  org.apache.sling.api.request.RequestPathInfo
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceUtil
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.cq.projects.impl.servlet.image;

import com.adobe.cq.projects.api.Project;
import com.adobe.cq.projects.impl.servlet.image.ProjectBaseImageServlet;
import com.day.cq.commons.ImageHelper;
import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import com.day.cq.wcm.api.designer.Style;
import com.day.cq.wcm.commons.AbstractImageServlet;
import com.day.cq.wcm.foundation.Image;
import com.day.image.Layer;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import javax.jcr.RepositoryException;
import javax.servlet.ServletException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.request.RequestPathInfo;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component
@Properties(value={@Property(name="sling.servlet.resourceTypes", value={"sling/servlet/default"}, propertyPrivate=1), @Property(name="sling.servlet.selectors", value={"projectcard"}, propertyPrivate=1), @Property(name="sling.servlet.extensions", value={"jpg", "jpeg", "png", "gif"}, propertyPrivate=1)})
public class ProjectCardImageServlet
extends ProjectBaseImageServlet {
    private static final Logger log = LoggerFactory.getLogger(ProjectCardImageServlet.class);

    public ProjectCardImageServlet() {
        super("project");
    }

    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
        if (!ResourceUtil.isNonExistingResource((Resource)request.getResource()) && request.getResource().adaptTo(Project.class) != null) {
            super.doGet(request, response);
        } else {
            response.sendError(500, "The resource must be of type Project");
        }
    }

    @Override
    public Resource getResource(Resource resource) {
        Project project = (Project)resource.adaptTo(Project.class);
        return project.getProjectCover();
    }

    @Override
    protected Layer createLayer(AbstractImageServlet.ImageContext imageContext) throws RepositoryException, IOException {
        int height;
        Resource projectCover = this.getResource(imageContext.resource);
        Resource previewResource = this.getPreviewResource(imageContext.resource);
        Calendar coverCal = this.getLastModificationTime(projectCover);
        Calendar previewCal = this.getLastModificationTime(previewResource);
        if (previewCal != null && coverCal != null && previewCal.getTimeInMillis() == coverCal.getTimeInMillis()) {
            return ImageHelper.createLayer((Resource)previewResource);
        }
        SlingHttpServletRequest request = imageContext.request;
        String[] selectors = request.getRequestPathInfo().getSelectors();
        if (selectors.length < 3 || selectors.length > 4 || !this.isInteger(selectors[1]) || !this.isInteger(selectors[2])) {
            log.error("Expected a width and height selector.");
            return null;
        }
        int width = Integer.parseInt(selectors[1]);
        if (!this.isDimensionSupported(width, height = Integer.parseInt(selectors[2]))) {
            log.error("Unsupported dimensions requested: {} x {}.", (Object)width, (Object)height);
            return null;
        }
        Resource resource = imageContext.resource;
        Project project = (Project)resource.adaptTo(Project.class);
        Resource coverImage = project.getProjectCover();
        Image image = new Image(coverImage);
        Asset asset = (Asset)coverImage.adaptTo(Asset.class);
        Rendition rendition = asset.getOriginal();
        ProjectBaseImageServlet.ProjectImageHelper adaptiveAdaptiveImageComponent = new ProjectBaseImageServlet.ProjectImageHelper(rendition.getStream());
        Layer layer = adaptiveAdaptiveImageComponent.scaleThisImage(image, 319, 319, imageContext.style);
        try {
            this.savePreview(layer, imageContext.resource);
        }
        catch (Exception e) {
            log.error("unable to save the preview image");
        }
        return layer;
    }
}