1 package com.atlassian.gzipfilter.selector;
2
3 import org.apache.log4j.Logger;
4 import org.tuckey.web.filters.urlrewrite.UrlRewriter;
5
6 import javax.servlet.http.HttpServletRequest;
7
8 public class UrlRewriteGzipCompatibilitySelector implements GzipCompatibilitySelector
9 {
10 private static final Logger log = Logger.getLogger(UrlRewriteGzipCompatibilitySelector.class);
11
12 private static final String GZIP_RESPONSE = "gzipResponse";
13 private static final String GZIP_MIME_TYPES = "gzipMimeTypes";
14
15
16 private final UrlRewriter rewriter;
17 private final HttpServletRequest request;
18
19 private final PatternMatcher patternMatcher = new PatternMatcher();
20
21 public UrlRewriteGzipCompatibilitySelector(UrlRewriter rewriter, HttpServletRequest request)
22 {
23 this.rewriter = rewriter;
24 this.request = request;
25 processUrlRewriteRules(request);
26 }
27
28 public boolean shouldGzip(String contentType)
29 {
30 String mimeTypesToGzip = (String) request.getAttribute(GZIP_MIME_TYPES);
31 return patternMatcher.matches(contentType, mimeTypesToGzip);
32 }
33
34 public boolean shouldGzip()
35 {
36
37
38 return !"false".equalsIgnoreCase(String.valueOf(request.getAttribute(GZIP_RESPONSE)));
39 }
40
41 private void processUrlRewriteRules(HttpServletRequest request)
42 {
43 if (rewriter != null)
44 {
45 try
46 {
47 rewriter.processRequest(request, null);
48 }
49 catch (Exception e)
50 {
51 log.error("Error whilst processing request to see if it should be gzipped ", e);
52 }
53 }
54 }
55 }