View Javadoc

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