1 package com.atlassian.gzipfilter.selector;
2
3 import org.tuckey.web.filters.urlrewrite.Conf;
4 import org.tuckey.web.filters.urlrewrite.UrlRewriter;
5
6 import javax.servlet.FilterConfig;
7 import javax.servlet.http.HttpServletRequest;
8 import java.io.InputStream;
9
10 import com.atlassian.gzipfilter.util.IOUtils;
11
12
13
14
15
16
17
18
19 public class DefaultGzipCompatibilitySelectorFactory implements GzipCompatibilitySelectorFactory
20 {
21 private static final String DEFAULT_CONFIG_FILENAME = "/WEB-INF/urlrewrite-gzip.xml";
22 private static final String INTERNAL_CONFIG_FILE = "com/atlassian/gzipfilter/urlrewrite-gzip-default.xml";
23 private static final String CONFIG_FILE_INIT_PARAM = "urlrewrite.configfile";
24 private UrlRewriter rewriter;
25
26 public GzipCompatibilitySelector getSelector(final FilterConfig filterConfig, final HttpServletRequest request)
27 {
28 if (rewriter == null)
29 rewriter = getUrlRewriter(filterConfig);
30
31 return new UrlRewriteGzipCompatibilitySelector(rewriter, request);
32 }
33
34 private UrlRewriter getUrlRewriter(FilterConfig filterConfig)
35 {
36 String configFileName = filterConfig.getServletContext().getInitParameter(CONFIG_FILE_INIT_PARAM);
37 if (configFileName == null)
38 {
39 configFileName = DEFAULT_CONFIG_FILENAME;
40 }
41 InputStream is = null;
42 try
43 {
44 is = filterConfig.getServletContext().getResourceAsStream(configFileName);
45
46 if (is == null)
47 {
48 is = getClass().getClassLoader().getResourceAsStream(INTERNAL_CONFIG_FILE);
49 }
50
51 if (is == null)
52 {
53 is = Thread.currentThread().getContextClassLoader().getResourceAsStream(INTERNAL_CONFIG_FILE);
54 }
55
56 if (is == null)
57 {
58 throw new IllegalStateException("Cannot load default '" + INTERNAL_CONFIG_FILE + "' configuration from jar");
59 }
60
61 Conf conf = new Conf(filterConfig.getServletContext(), is, null, null);
62 return new UrlRewriter(conf);
63 }
64 finally
65 {
66 IOUtils.closeQuietly(is);
67 }
68 }
69 }