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
23
24
25
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
37
38 public BaseServletModuleDescriptor()
39 {
40 }
41
42
43
44
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();
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 }