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 protected static final Logger log = LoggerFactory.getLogger(BaseServletModuleDescriptor.class);
30
31 private List<String> paths;
32 private Map<String, String> initParams;
33 private boolean asyncSupported;
34
35
36
37
38
39 public BaseServletModuleDescriptor(ModuleFactory moduleCreator) {
40 super(moduleCreator);
41 }
42
43 public void init(Plugin plugin, Element element) throws PluginParseException {
44 super.init(plugin, element);
45
46 checkPermissions();
47
48 List<Element> urlPatterns = element.elements("url-pattern");
49 paths = new ArrayList<>(urlPatterns.size());
50
51 for (Element urlPattern : urlPatterns) {
52 paths.add(urlPattern.getTextTrim());
53 }
54
55 initParams = new HashMap<>();
56 List<Element> paramsList = element.elements("init-param");
57 for (Element initParamEl : paramsList) {
58 Element paramNameEl = initParamEl.element("param-name");
59 Element paramValueEl = initParamEl.element("param-value");
60 initParams.put(paramNameEl.getTextTrim(), paramValueEl.getTextTrim());
61 }
62 Element async = element.element("async-supported");
63 if (async != null) {
64 asyncSupported = Boolean.valueOf(async.getTextTrim());
65 } else {
66 asyncSupported = false;
67 }
68 }
69
70 @Override
71 protected void provideValidationRules(ValidationPattern pattern) {
72 super.provideValidationRules(pattern);
73 pattern.
74 rule(
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 return paths;
83 }
84
85 public Map<String, String> getInitParams() {
86 return initParams;
87 }
88
89
90
91
92 public boolean isAsyncSupported() {
93 return asyncSupported;
94 }
95 }