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  {
26      private final OsgiPlugin osgiPlugin;
27      private final RestDelegatingServletFilter restDelegatingServletFilter;
28      private final RestApiContext restApiContext;
29  
30      RestServletFilterModuleDescriptor(OsgiPlugin plugin, ModuleFactory moduleFactory, ServletModuleManager servletModuleManager, RestApiContext restApiContext)
31      {
32          super(Preconditions.checkNotNull(moduleFactory), Preconditions.checkNotNull(servletModuleManager));
33          this.restApiContext = Preconditions.checkNotNull(restApiContext);
34          this.osgiPlugin = Preconditions.checkNotNull(plugin);
35          this.restDelegatingServletFilter = new RestDelegatingServletFilter(plugin, restApiContext);
36      }
37  
38      @Override
39      public void init(Plugin plugin, Element element) throws PluginParseException
40      {
41          super.init(plugin, element);
42  
43          //see if we have a resourcedoc.xml and if so, use the extended WADL generator
44          if (resourcesAvailable(plugin, APPLICATION_XML, GRAMMARS_XML, RESOURCE_XML))
45          {
46              getInitParams().put("com.sun.jersey.config.property.WadlGeneratorConfig", AtlassianWadlGeneratorConfig.class.getName());
47          }
48      }
49  
50      @Override
51      protected void provideValidationRules(ValidationPattern pattern)
52      {
53      }
54  
55      @Override
56      public String getName()
57      {
58          return "Rest Servlet Filter";
59      }
60  
61      protected void autowireObject(Object obj)
62      {
63          osgiPlugin.autowire(obj);
64      }
65  
66      @Override
67      public Filter getModule()
68      {
69          return restDelegatingServletFilter;
70      }
71  
72      public String getBasePath()
73      {
74          return restApiContext.getApiPath();
75      }
76  
77      public ApiVersion getVersion()
78      {
79          return restApiContext.getVersion();
80      }
81  
82      private static boolean resourcesAvailable(Plugin plugin, String...resources)
83      {
84          for (final String resource : resources)
85          {
86              if (plugin.getResource(resource) == null)
87              {
88                  return false;
89              }
90          }
91          return true;
92      }
93  }