ThumbnailServlet.java
4.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
* 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");
}
}