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
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();
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 }