ThumbnailServlet.java 4.95 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.image.Layer
 *  com.day.jcr.vault.packaging.JcrPackage
 *  com.day.jcr.vault.packaging.JcrPackageDefinition
 *  com.day.jcr.vault.packaging.JcrPackageManager
 *  com.day.jcr.vault.packaging.PackagingService
 *  javax.jcr.Binary
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.Session
 *  javax.servlet.ServletException
 *  javax.servlet.ServletOutputStream
 *  javax.servlet.http.HttpServletRequest
 *  javax.servlet.http.HttpServletResponse
 *  org.apache.commons.io.IOUtils
 *  org.osgi.framework.BundleContext
 *  org.slf4j.Logger
 */
package com.day.crx.packmgr.impl.servlets;

import com.day.crx.packaging.gfx.GfxHelper;
import com.day.crx.packaging.gfx.ImageHelper;
import com.day.crx.packaging.gfx.ImageResource;
import com.day.crx.packmgr.impl.AbstractServlet;
import com.day.crx.packmgr.impl.support.RequestData;
import com.day.image.Layer;
import com.day.jcr.vault.packaging.JcrPackage;
import com.day.jcr.vault.packaging.JcrPackageDefinition;
import com.day.jcr.vault.packaging.JcrPackageManager;
import com.day.jcr.vault.packaging.PackagingService;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Calendar;
import javax.jcr.Binary;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.Session;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;

public class ThumbnailServlet
extends AbstractServlet {
    public ThumbnailServlet(BundleContext bc) {
        super(bc);
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    @Override
    protected void doService(HttpServletRequest request, HttpServletResponse response, Session jcrSession) throws ServletException, IOException {
        try {
            JcrPackageManager packMgr = PackagingService.getPackageManager((Session)jcrSession);
            RequestData req = new RequestData(request);
            String path = req.getParameter("path");
            if (jcrSession.nodeExists(path)) {
                JcrPackage pack = packMgr.open(jcrSession.getNode(path));
                JcrPackageDefinition def = pack.getDefinition();
                Node defNode = def.getNode();
                if (defNode.hasNode("thumbnail")) {
                    Node node = defNode.getNode("thumbnail");
                    if (ImageHelper.handleIfModifiedSince(request, response, node)) {
                        return;
                    }
                    ImageResource image = new ImageResource(node);
                    image.setItemName("file", "file");
                    image.setItemName("imageRotate", "rotate");
                    image.setItemName("imageCrop", "crop");
                    image.setItemName("fileReference", "reference");
                    Layer layer = GfxHelper.stampThumbnail(image);
                    if (layer == null) {
                        response.sendError(404);
                        return;
                    }
                    Calendar lastMod = def.getLastModified();
                    if (lastMod != null) {
                        response.setDateHeader("Last-Modified", lastMod.getTimeInMillis());
                    }
                    response.setContentType("image/png");
                    layer.write("image/png", 1.0, (OutputStream)response.getOutputStream());
                    response.flushBuffer();
                    return;
                }
                if (defNode.hasNode("thumbnail.png")) {
                    Node thumb = defNode.getNode("thumbnail.png/jcr:content");
                    if (ImageHelper.handleIfModifiedSince(request, response, thumb)) {
                        return;
                    }
                    Property data = thumb.getProperty("jcr:data");
                    String size = String.valueOf(data.getLength());
                    InputStream is = data.getBinary().getStream();
                    response.reset();
                    response.setContentType("image/png");
                    response.addHeader("Content-Length", size);
                    response.setDateHeader("Last-Modified", thumb.getProperty("{http://www.jcp.org/jcr/1.0}lastModified").getLong());
                    try {
                        IOUtils.copy((InputStream)is, (OutputStream)response.getOutputStream());
                    }
                    finally {
                        IOUtils.closeQuietly((InputStream)is);
                    }
                    return;
                }
            }
        }
        catch (Exception e) {
            this.logger.error("Error during thumbnail access: {}", (Object)e.toString());
        }
        response.sendRedirect(request.getContextPath() + request.getServletPath() + "/img/thumbnail.png");
    }
}