Coverage Report - org.webslinger.ext.types.thumb
 
Classes in this File Line Coverage Branch Coverage Complexity
thumb
0%
0/35
N/A
0
thumb$1
0%
0/4
N/A
0
thumb$2
0%
0/4
N/A
0
thumb$ThumberCache
0%
0/17
0%
0/2
0
 
 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.servlet.Binary;
 17  
 import org.webslinger.ext.image.ConstrainingTransformerFactory;
 18  
 import org.webslinger.ext.image.CroppingTransformerFactory;
 19  
 import org.webslinger.ext.image.ImageDescriptor;
 20  
 import org.webslinger.ext.image.ImageConvertingCache;
 21  
 import org.webslinger.ext.image.ImageConvertor;
 22  
 import org.webslinger.ext.image.ImageUtils;
 23  
 import org.webslinger.ext.image.PathContextImageDescriptor;
 24  
 import org.webslinger.lang.ConcurrentCache;
 25  
 import static org.webslinger.lang.NumberUtil.parseInt;
 26  
 import org.webslinger.servlet.Binary;
 27  
 import org.webslinger.util.TTLObject;
 28  
 
 29  0
 public class thumb extends TypeHandler {
 30  
     protected ThumberCache thumbers;
 31  
     protected ThumberCache previewThumbers;
 32  
 
 33  
     public void init(WebslingerServletContext context, String type) throws IOException {
 34  0
         super.init(context, type);
 35  0
         thumbers = new ThumberCache(thumb.class, "thumbers", null, context.getContainer().getRoot(), false);
 36  0
         previewThumbers = new ThumberCache(thumb.class, "previewThumbers", null, context.getContainer().getRoot(), true);
 37  0
     }
 38  
 
 39  
     public void servePreviewThumb(PathContext pc, HttpServletRequest request, HttpServletResponse response, int width, int height) throws IOException, ServletException {
 40  0
         servePreviewThumb(pc, request, response, new Rectangle(0, 0, width, height));
 41  0
     }
 42  
 
 43  
     public void servePreviewThumb(final PathContext pc, HttpServletRequest request, HttpServletResponse response, Rectangle size) throws IOException, ServletException {
 44  0
         servePreviewThumb(new PathContextImageDescriptor(pc), request, response, size);
 45  0
     }
 46  
 
 47  
     public void servePreviewThumb(final ImageDescriptor image, HttpServletRequest request, HttpServletResponse response, int width, int height) throws IOException, ServletException {
 48  0
         servePreviewThumb(image, request, response, new Rectangle(0, 0, width, height));
 49  0
     }
 50  
 
 51  
     public void servePreviewThumb(final ImageDescriptor image, HttpServletRequest request, HttpServletResponse response, Rectangle size) throws IOException, ServletException {
 52  0
         final FileObject dest = getPreviewThumb(image, size);
 53  0
         Binary.run(
 54  0
             new Binary.FileContent() {
 55  
                 public FileObject getFile() throws IOException {
 56  0
                     return dest;
 57  
                 }
 58  
 
 59  
                 public String getContentType() throws IOException {
 60  0
                     return image.getContentType();
 61  
                 }
 62  
 
 63  
                 public String getContentEncoding() throws IOException {
 64  0
                     return image.getContentEncoding();
 65  
                 }
 66  
             },
 67  
             request,
 68  
             response
 69  
         );
 70  0
     }
 71  
 
 72  
     public void serveThumb(PathContext pc, HttpServletRequest request, HttpServletResponse response, int width, int height) throws IOException, ServletException {
 73  0
         serveThumb(pc, request, response, new Rectangle(0, 0, width, height));
 74  0
     }
 75  
 
 76  
     public void serveThumb(final PathContext pc, HttpServletRequest request, HttpServletResponse response, Rectangle size) throws IOException, ServletException {
 77  0
         serveThumb(new PathContextImageDescriptor(pc), request, response, size);
 78  0
     }
 79  
 
 80  
     public void serveThumb(final ImageDescriptor image, HttpServletRequest request, HttpServletResponse response, int width, int height) throws IOException, ServletException {
 81  0
         serveThumb(image, request, response, new Rectangle(0, 0, width, height));
 82  0
     }
 83  
 
 84  
     public void serveThumb(final ImageDescriptor image, HttpServletRequest request, HttpServletResponse response, Rectangle size) throws IOException, ServletException {
 85  0
         final FileObject dest = getThumb(image, size);
 86  0
         Binary.run(
 87  0
             new Binary.FileContent() {
 88  
                 public FileObject getFile() throws IOException {
 89  0
                     return dest;
 90  
                 }
 91  
 
 92  
                 public String getContentType() throws IOException {
 93  0
                     return image.getContentType();
 94  
                 }
 95  
 
 96  
                 public String getContentEncoding() throws IOException {
 97  0
                     return image.getContentEncoding();
 98  
                 }
 99  
             },
 100  
             request,
 101  
             response
 102  
         );
 103  0
     }
 104  
 
 105  
     public FileObject getPreviewThumb(PathContext pc, int width, int height) throws IOException {
 106  0
         return getPreviewThumb(pc, new Rectangle(0, 0, width, height));
 107  
     }
 108  
 
 109  
     public FileObject getPreviewThumb(PathContext pc, Rectangle size) throws IOException {
 110  0
         return getPreviewThumb(new PathContextImageDescriptor(pc), size);
 111  
     }
 112  
 
 113  
     public FileObject getPreviewThumb(ImageDescriptor image, int width, int height) throws IOException {
 114  0
         return getPreviewThumb(image, new Rectangle(0, 0, width, height));
 115  
     }
 116  
 
 117  
     public FileObject getPreviewThumb(ImageDescriptor image, Rectangle size) throws IOException {
 118  0
         return previewThumbers.get(size).get(image).getObject();
 119  
     }
 120  
 
 121  
     public FileObject getThumb(PathContext pc, int width, int height) throws IOException {
 122  0
         return getThumb(pc, new Rectangle(0, 0, width, height));
 123  
     }
 124  
 
 125  
     public FileObject getThumb(PathContext pc, Rectangle size) throws IOException {
 126  0
         return getThumb(new PathContextImageDescriptor(pc), size);
 127  
     }
 128  
 
 129  
     public FileObject getThumb(ImageDescriptor image, int width, int height) throws IOException {
 130  0
         return getThumb(image, new Rectangle(0, 0, width, height));
 131  
     }
 132  
 
 133  
     public FileObject getThumb(ImageDescriptor image, Rectangle size) throws IOException {
 134  0
         return thumbers.get(size).get(image).getObject();
 135  
     }
 136  
 
 137  
     public Object run(Webslinger webslinger) throws IOException, ServletException {
 138  0
         return run(webslinger.getPathContext(), webslinger.getRequest(), webslinger.getResponse());
 139  
     }
 140  
 
 141  
     public Object run(PathContext pc, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
 142  0
         serveThumb(pc, request, response, new Rectangle(0, 0, parseInt(pc.getAttribute("thumbWidth"), 100), parseInt(pc.getAttribute("thumbHeight"), 100)));
 143  0
         return null;
 144  
     }
 145  
 
 146  0
     protected final class ThumberCache extends ConcurrentCache<Rectangle, ImageConvertingCache> {
 147  
         private final FileObject root;
 148  
         private final boolean preview;
 149  
 
 150  0
         protected ThumberCache(Class<?> owner, String field, String label, FileObject root, boolean preview) {
 151  0
             super(owner, field, label, ConcurrentCache.SOFT);
 152  0
             this.root = root;
 153  0
             this.preview = preview;
 154  0
         }
 155  
 
 156  
         public ImageConvertingCache get(Rectangle size) throws IOException {
 157  
             try {
 158  0
                 return super.get(size);
 159  0
             } catch (RuntimeException e) {
 160  0
                 throw e;
 161  0
             } catch (IOException e) {
 162  0
                 throw e;
 163  0
             } catch (Exception e) {
 164  0
                 throw (InternalError) new InternalError(e.getMessage()).initCause(e);
 165  
             }
 166  
         }
 167  
 
 168  
         protected ImageConvertingCache createValue(Rectangle size) throws Exception {
 169  0
             ImageConvertor imageConvertor = new ImageConvertor(root.resolveFile(preview ? "/Var/PreviewThumbs" : "/Var/Thumbs/"));
 170  0
             imageConvertor.getFactories().add(new CroppingTransformerFactory(preview));
 171  0
             imageConvertor.getFactories().add(new ConstrainingTransformerFactory(size));
 172  0
             return new ImageConvertingCache(ThumberCache.class, preview ? "previewThumbs" : "thumbs", size.toString(), imageConvertor);
 173  
         }
 174  
     }
 175  
 }