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       * @since 2.5.0
37       * @param moduleCreator
38       */
39      public BaseServletModuleDescriptor(ModuleFactory moduleCreator)
40      {
41          super(moduleCreator);
42      }
43  
44      public void init(Plugin plugin, Element element) throws PluginParseException
45      {
46          super.init(plugin, element);
47  
48          checkPermissions(); // do that early
49  
50          List<Element> urlPatterns = element.elements("url-pattern");
51          paths = new ArrayList<String>(urlPatterns.size());
52  
53          for (Element urlPattern : urlPatterns)
54          {
55              paths.add(urlPattern.getTextTrim());
56          }
57  
58          initParams = new HashMap<String,String>();
59          List<Element> paramsList = element.elements("init-param");
60          for (Element initParamEl : paramsList)
61          {
62              Element paramNameEl = initParamEl.element("param-name");
63              Element paramValueEl = initParamEl.element("param-value");
64              initParams.put(paramNameEl.getTextTrim(), paramValueEl.getTextTrim());
65          }
66      }
67  
68      @Override
69      protected void provideValidationRules(ValidationPattern pattern)
70      {
71          super.provideValidationRules(pattern);
72          pattern.
73                  rule(
74                      test("@class").withError("The class is required"),
75                      test("url-pattern").withError("There must be at least one path specified")).
76                  rule("init-param",
77                      test("param-name").withError("Parameter name is required"),
78                      test("param-value").withError("Parameter value is required"));
79      }
80  
81      public List<String> getPaths()
82      {
83          return paths;
84      }
85  
86      public Map<String,String> getInitParams()
87      {
88          return initParams;
89      }
90  
91  }