View Javadoc

1   package com.atlassian.plugins.rest.module;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.PluginParseException;
5   import com.atlassian.plugin.module.ModuleFactory;
6   import com.atlassian.plugin.osgi.factory.OsgiPlugin;
7   import com.atlassian.plugin.servlet.ServletModuleManager;
8   import com.atlassian.plugin.servlet.descriptors.ServletFilterModuleDescriptor;
9   import com.atlassian.plugin.util.validation.ValidationPattern;
10  import com.atlassian.plugins.rest.doclet.generators.AtlassianWadlGeneratorConfig;
11  import com.google.common.base.Preconditions;
12  import org.dom4j.Element;
13  
14  import javax.servlet.Filter;
15  
16  import static com.atlassian.plugins.rest.doclet.generators.AtlassianWadlGeneratorConfig.APPLICATION_XML;
17  import static com.atlassian.plugins.rest.doclet.generators.AtlassianWadlGeneratorConfig.GRAMMARS_XML;
18  import static com.atlassian.plugins.rest.doclet.generators.AtlassianWadlGeneratorConfig.RESOURCE_XML;
19  
20  /**
21   * The module descriptor for the REST servlet. Registered dynamically by the {@link RestModuleDescriptor}.
22   * Uses the specific {@link RestDelegatingServletFilter}.
23   */
24  public class RestServletFilterModuleDescriptor extends ServletFilterModuleDescriptor {
25      private final RestDelegatingServletFilter restDelegatingServletFilter;
26      private final RestApiContext restApiContext;
27      private final static String DISABLE_WADL_PROPERTY = "com.sun.jersey.config.feature.DisableWADL";
28  
29      RestServletFilterModuleDescriptor(OsgiPlugin plugin, ModuleFactory moduleFactory, ServletModuleManager servletModuleManager, RestApiContext restApiContext) {
30          super(Preconditions.checkNotNull(moduleFactory), Preconditions.checkNotNull(servletModuleManager));
31          this.restApiContext = Preconditions.checkNotNull(restApiContext);
32          this.restDelegatingServletFilter = new RestDelegatingServletFilter(plugin, restApiContext);
33      }
34  
35      @Override
36      public void init(Plugin plugin, Element element) throws PluginParseException {
37          super.init(plugin, element);
38  
39          //JRADEV-23134 : alllow OD to switch off WADL generation, via system property
40          getInitParams().put(DISABLE_WADL_PROPERTY, System.getProperty(DISABLE_WADL_PROPERTY, "false"));
41  
42          //see if we have a resourcedoc.xml and if so, use the extended WADL generator
43          if (resourcesAvailable(plugin, APPLICATION_XML, GRAMMARS_XML, RESOURCE_XML)) {
44              getInitParams().put("com.sun.jersey.config.property.WadlGeneratorConfig", AtlassianWadlGeneratorConfig.class.getName());
45          }
46      }
47  
48      @Override
49      protected void provideValidationRules(ValidationPattern pattern) {
50      }
51  
52      @Override
53      public String getName() {
54          return "Rest Servlet Filter";
55      }
56  
57      @Override
58      public Filter getModule() {
59          return restDelegatingServletFilter;
60      }
61  
62      public String getBasePath() {
63          return restApiContext.getApiPath();
64      }
65  
66      public ApiVersion getVersion() {
67          return restApiContext.getVersion();
68      }
69  
70      private static boolean resourcesAvailable(Plugin plugin, String... resources) {
71          for (final String resource : resources) {
72              if (plugin.getResource(resource) == null) {
73                  return false;
74              }
75          }
76          return true;
77      }
78  }