| 1 | |
package org.webslinger.ext.types; |
| 2 | |
|
| 3 | |
import java.awt.Rectangle; |
| 4 | |
import java.io.IOException; |
| 5 | |
import java.util.Map; |
| 6 | |
import javax.servlet.ServletException; |
| 7 | |
import javax.servlet.http.HttpServletRequest; |
| 8 | |
import javax.servlet.http.HttpServletResponse; |
| 9 | |
|
| 10 | |
import org.apache.commons.vfs.FileObject; |
| 11 | |
|
| 12 | |
import org.webslinger.PathContext; |
| 13 | |
import org.webslinger.TypeHandler; |
| 14 | |
import org.webslinger.Webslinger; |
| 15 | |
import org.webslinger.WebslingerServletContext; |
| 16 | |
import org.webslinger.lang.ConcurrentCache; |
| 17 | |
import org.webslinger.ext.image.CommonsVfsImageDescriptor; |
| 18 | |
import org.webslinger.ext.image.ConstrainingTransformerFactory; |
| 19 | |
import org.webslinger.ext.image.CroppingTransformerFactory; |
| 20 | |
import org.webslinger.ext.image.ImageDescriptor; |
| 21 | |
import org.webslinger.ext.image.ImageConvertingCache; |
| 22 | |
import org.webslinger.ext.image.ImageConvertor; |
| 23 | |
import org.webslinger.ext.image.ImageUtils; |
| 24 | |
import org.webslinger.ext.image.PathContextImageDescriptor; |
| 25 | |
import org.webslinger.servlet.Binary; |
| 26 | |
import org.webslinger.util.TTLObject; |
| 27 | |
|
| 28 | 0 | public class image extends TypeHandler { |
| 29 | |
protected ImageConvertingCache previewCroppers; |
| 30 | |
protected ImageConvertingCache croppers; |
| 31 | |
|
| 32 | |
public void init(WebslingerServletContext context, String type) throws IOException { |
| 33 | 0 | super.init(context, type); |
| 34 | 0 | FileObject root = context.getContainer().getRoot(); |
| 35 | 0 | ImageConvertor imageConvertor = new ImageConvertor(root.resolveFile("/Var/Image/")); |
| 36 | 0 | imageConvertor.getFactories().add(new CroppingTransformerFactory()); |
| 37 | 0 | croppers = new ImageConvertingCache(image.class, "cropper", null, imageConvertor); |
| 38 | 0 | ImageConvertor imagePreviewConvertor = new ImageConvertor(root.resolveFile("/Var/ImagePreview/")); |
| 39 | 0 | imagePreviewConvertor.getFactories().add(new CroppingTransformerFactory(true)); |
| 40 | 0 | previewCroppers = new ImageConvertingCache(image.class, "previewCroppers", null, imagePreviewConvertor); |
| 41 | 0 | } |
| 42 | |
|
| 43 | |
public Object run(Webslinger webslinger) throws IOException, ServletException { |
| 44 | 0 | return run(webslinger.getPathContext(), webslinger.getRequest(), webslinger.getResponse()); |
| 45 | |
} |
| 46 | |
|
| 47 | |
public Object run(PathContext pc, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { |
| 48 | 0 | run(new PathContextImageDescriptor(pc), request, response); |
| 49 | 0 | return null; |
| 50 | |
} |
| 51 | |
|
| 52 | |
public void run(ImageDescriptor image, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { |
| 53 | 0 | run(image, request, response, crop(image)); |
| 54 | 0 | } |
| 55 | |
|
| 56 | |
public FileObject crop(FileObject file) throws IOException { |
| 57 | 0 | return crop(new CommonsVfsImageDescriptor(file)); |
| 58 | |
} |
| 59 | |
|
| 60 | |
public FileObject crop(PathContext pc) throws IOException { |
| 61 | 0 | return crop(new PathContextImageDescriptor(pc)); |
| 62 | |
} |
| 63 | |
|
| 64 | |
public FileObject crop(ImageDescriptor image) throws IOException { |
| 65 | 0 | return croppers.get(image).getObject(); |
| 66 | |
} |
| 67 | |
|
| 68 | |
public Object runPreview(PathContext pc, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { |
| 69 | 0 | runPreview(new PathContextImageDescriptor(pc), request, response); |
| 70 | 0 | return null; |
| 71 | |
} |
| 72 | |
|
| 73 | |
public void runPreview(ImageDescriptor image, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { |
| 74 | 0 | run(image, request, response, preview(image)); |
| 75 | 0 | } |
| 76 | |
|
| 77 | |
public FileObject preview(FileObject file) throws IOException { |
| 78 | 0 | return preview(new CommonsVfsImageDescriptor(file)); |
| 79 | |
} |
| 80 | |
|
| 81 | |
public FileObject preview(PathContext pc) throws IOException { |
| 82 | 0 | return preview(new PathContextImageDescriptor(pc)); |
| 83 | |
} |
| 84 | |
|
| 85 | |
public FileObject preview(ImageDescriptor image) throws IOException { |
| 86 | 0 | return previewCroppers.get(image).getObject(); |
| 87 | |
} |
| 88 | |
|
| 89 | |
public static void run(final ImageDescriptor image, HttpServletRequest request, HttpServletResponse response, final FileObject dest) throws IOException, ServletException { |
| 90 | 0 | Binary.run( |
| 91 | 0 | new Binary.FileContent() { |
| 92 | |
public FileObject getFile() throws IOException { |
| 93 | 0 | return dest; |
| 94 | |
} |
| 95 | |
|
| 96 | |
public String getContentType() throws IOException { |
| 97 | 0 | String contentType = super.getContentType(); |
| 98 | 0 | if (contentType == null) contentType = image.getContentType(); |
| 99 | 0 | return contentType; |
| 100 | |
} |
| 101 | |
|
| 102 | |
public String getContentEncoding() throws IOException { |
| 103 | 0 | String contentEncoding = super.getContentEncoding(); |
| 104 | 0 | if (contentEncoding == null) contentEncoding = image.getContentEncoding(); |
| 105 | 0 | return contentEncoding; |
| 106 | |
} |
| 107 | |
}, |
| 108 | |
request, |
| 109 | |
response |
| 110 | |
); |
| 111 | 0 | } |
| 112 | |
} |