View Javadoc

1   package com.atlassian.plugin.servlet.descriptors;
2   
3   import java.util.ArrayList;
4   import java.util.HashMap;
5   import java.util.Iterator;
6   import java.util.List;
7   import java.util.Map;
8   
9   import org.apache.commons.logging.Log;
10  import org.apache.commons.logging.LogFactory;
11  import org.dom4j.Element;
12  
13  import com.atlassian.plugin.Plugin;
14  import com.atlassian.plugin.PluginParseException;
15  import com.atlassian.plugin.descriptors.AbstractModuleDescriptor;
16  
17  /**
18   * Acts as a base for other servlet type module descriptors to inherit.  It adds parsing and retrieval of any paths
19   * declared in the descriptor with <url-pattern> as well as <init-param>s. 
20   * 
21   * @since 2.1.0
22   */
23  public abstract class BaseServletModuleDescriptor<T> extends AbstractModuleDescriptor<T>
24  {
25      protected static final Log log = LogFactory.getLog(BaseServletModuleDescriptor.class);
26  
27      private List<String> paths;
28      private Map<String,String> initParams;
29  
30      public void init(Plugin plugin, Element element) throws PluginParseException
31      {
32          super.init(plugin, element);
33      
34          List<Element> urlPatterns = element.elements("url-pattern");
35          paths = new ArrayList<String>(urlPatterns.size());
36      
37          for (Iterator<Element> iterator = urlPatterns.iterator(); iterator.hasNext();)
38          {
39              Element urlPattern = iterator.next();
40              paths.add(urlPattern.getTextTrim());
41          }
42  
43          if (paths.isEmpty())
44              throw new IllegalArgumentException("There must be at least one path specified");
45      
46          initParams = new HashMap<String,String>();
47          List<Element> paramsList = element.elements("init-param");
48          for (Iterator<Element> i = paramsList.iterator(); i.hasNext();) {
49              Element initParamEl = i.next();
50              Element paramNameEl = initParamEl.element("param-name");
51              Element paramValueEl = initParamEl.element("param-value");
52              if (paramNameEl != null && paramValueEl != null) {
53                  initParams.put(paramNameEl.getTextTrim(), paramValueEl.getTextTrim());
54              } else {
55                  log.warn("Invalid init-param XML for servlet module: " + getCompleteKey());
56              }
57          }
58      }
59  
60      public List<String> getPaths()
61      {
62          return paths;
63      }
64  
65      public Map<String,String> getInitParams()
66      {
67          return initParams;
68      }
69  
70  }