View Javadoc

1   package com.atlassian.plugin.servlet.descriptors;
2   
3   import com.atlassian.plugin.Permissions;
4   import com.atlassian.plugin.Plugin;
5   import com.atlassian.plugin.PluginParseException;
6   import com.atlassian.plugin.RequirePermission;
7   import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
8   import com.atlassian.plugin.module.ModuleFactory;
9   import com.atlassian.plugin.util.validation.ValidationPattern;
10  import org.dom4j.Element;
11  import org.slf4j.Logger;
12  import org.slf4j.LoggerFactory;
13  
14  import java.util.ArrayList;
15  import java.util.HashMap;
16  import java.util.List;
17  import java.util.Map;
18  
19  import static com.atlassian.plugin.util.validation.ValidationPattern.test;
20  
21  /**
22   * Acts as a base for other servlet type module descriptors to inherit.  It adds parsing and retrieval of any paths
23   * declared in the descriptor with <url-pattern> as well as <init-param>s. 
24   * 
25   * @since 2.1.0
26   */
27  @RequirePermission(Permissions.EXECUTE_JAVA)
28  public abstract class BaseServletModuleDescriptor<T> extends AbstractModuleDescriptor<T>
29  {
30      protected static final Logger log = LoggerFactory.getLogger(BaseServletModuleDescriptor.class);
31  
32      private List<String> paths;
33      private Map<String,String> initParams;
34  
35      /**
36       * @deprecated  Since 2.5.0, use {@link BaseServletModuleDescriptor( com.atlassian.plugin.module.ModuleFactory )} instead (as of 2.5.0).
37       */
38      public BaseServletModuleDescriptor()
39      {
40      }
41  
42      /**
43       * @since 2.5.0
44       * @param moduleCreator
45       */
46      public BaseServletModuleDescriptor(ModuleFactory moduleCreator)
47      {
48          super(moduleCreator);
49      }
50  
51      public void init(Plugin plugin, Element element) throws PluginParseException
52      {
53          super.init(plugin, element);
54  
55          checkPermissions(); // do that early
56  
57          List<Element> urlPatterns = element.elements("url-pattern");
58          paths = new ArrayList<String>(urlPatterns.size());
59  
60          for (Element urlPattern : urlPatterns)
61          {
62              paths.add(urlPattern.getTextTrim());
63          }
64  
65          initParams = new HashMap<String,String>();
66          List<Element> paramsList = element.elements("init-param");
67          for (Element initParamEl : paramsList)
68          {
69              Element paramNameEl = initParamEl.element("param-name");
70              Element paramValueEl = initParamEl.element("param-value");
71              initParams.put(paramNameEl.getTextTrim(), paramValueEl.getTextTrim());
72          }
73      }
74  
75      @Override
76      protected void provideValidationRules(ValidationPattern pattern)
77      {
78          super.provideValidationRules(pattern);
79          pattern.
80                  rule(
81                      test("@class").withError("The class is required"),
82                      test("url-pattern").withError("There must be at least one path specified")).
83                  rule("init-param",
84                      test("param-name").withError("Parameter name is required"),
85                      test("param-value").withError("Parameter value is required"));
86      }
87  
88      public List<String> getPaths()
89      {
90          return paths;
91      }
92  
93      public Map<String,String> getInitParams()
94      {
95          return initParams;
96      }
97  
98  }