View Javadoc

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      // this must match the header that is set in urlrewrite-gzip.xml
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          // This header is set in urlrewrite.xml, which uses complicated regexp
37          // to determine which browsers and requests to gzip
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  }