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
21
22
23
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
34
35 public BaseServletModuleDescriptor()
36 {
37 }
38
39
40
41
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 }