View Javadoc
1   package com.atlassian.plugin.servlet.descriptors;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.module.ModuleFactory;
5   import com.atlassian.plugin.module.PrefixDelegatingModuleFactory;
6   import com.atlassian.plugin.servlet.ObjectFactories;
7   import com.atlassian.plugin.servlet.ObjectFactory;
8   import com.atlassian.plugin.servlet.PluginBuilder;
9   import com.atlassian.plugin.servlet.ServletModuleManager;
10  
11  import javax.servlet.http.HttpServlet;
12  import java.util.ArrayList;
13  import java.util.Collections;
14  import java.util.HashMap;
15  import java.util.LinkedList;
16  import java.util.List;
17  import java.util.Map;
18  import java.util.Optional;
19  
20  import static java.util.Collections.emptySet;
21  import static org.mockito.Mockito.mock;
22  
23  public class ServletModuleDescriptorBuilder {
24      private Plugin plugin = new PluginBuilder().build();
25      private String key = "test.servlet";
26      private Optional<String> scopeKey = Optional.empty();
27      private List<String> paths = new LinkedList<>();
28      private ServletModuleManager servletModuleManager = mock(ServletModuleManager.class);
29      private Map<String, String> initParams = new HashMap<>();
30      private ObjectFactory<HttpServlet> servletFactory;
31  
32      public ServletModuleDescriptorBuilder with(Plugin plugin) {
33          this.plugin = plugin;
34          return this;
35      }
36  
37      public ServletModuleDescriptorBuilder withKey(String key) {
38          this.key = key;
39          return this;
40      }
41  
42      public ServletModuleDescriptorBuilder with(final HttpServlet servlet) {
43          this.servletFactory = ObjectFactories.createSingleton(servlet);
44          return this;
45      }
46  
47      public ServletModuleDescriptorBuilder withFactory(ObjectFactory<HttpServlet> servlet) {
48          this.servletFactory = servlet;
49          return this;
50      }
51  
52      public ServletModuleDescriptorBuilder withPath(String path) {
53          paths.add(path);
54          return this;
55      }
56  
57      public ServletModuleDescriptorBuilder with(ServletModuleManager servletModuleManager) {
58          this.servletModuleManager = servletModuleManager;
59          return this;
60      }
61  
62      public ServletModuleDescriptorBuilder withInitParam(String name, String value) {
63          initParams.put(name, value);
64          return this;
65      }
66  
67      public ServletModuleDescriptorBuilder withScopeKey(Optional<String> scopeKey) {
68          this.scopeKey = scopeKey;
69          return this;
70      }
71  
72  
73      public ServletModuleDescriptor build() {
74          Descriptor d = new Descriptor(plugin, key, scopeKey, servletFactory, immutableList(paths), immutableMap(initParams),
75                  servletModuleManager, new PrefixDelegatingModuleFactory(emptySet()));
76          plugin.addModuleDescriptor(d);
77          return d;
78      }
79  
80      static <K, V> Map<K, V> immutableMap(Map<K, V> initParams) {
81          return Collections.unmodifiableMap(new HashMap<K, V>(initParams));
82      }
83  
84      <T> List<T> immutableList(List<T> list) {
85          List<T> copy = new ArrayList<T>(list.size());
86          copy.addAll(list);
87          return Collections.unmodifiableList(copy);
88      }
89  
90      static final class Descriptor extends ServletModuleDescriptor {
91          final String key;
92          final ObjectFactory<HttpServlet> servletFactory;
93          final List<String> paths;
94          final ServletModuleManager servletModuleManager;
95          final Map<String, String> initParams;
96          final Optional<String> scopeKey;
97  
98          public Descriptor(
99                  Plugin plugin,
100                 String key,
101                 Optional<String> scopeKey,
102                 ObjectFactory<HttpServlet> servletFactory,
103                 List<String> paths,
104                 Map<String, String> initParams,
105                 ServletModuleManager servletModuleManager,
106                 ModuleFactory moduleFactory) {
107             super(moduleFactory, servletModuleManager);
108             this.plugin = plugin;
109             this.key = key;
110             this.scopeKey = scopeKey;
111             this.servletFactory = servletFactory;
112             this.paths = paths;
113             this.initParams = initParams;
114             this.servletModuleManager = servletModuleManager;
115         }
116 
117         @Override
118         public Plugin getPlugin() {
119             return plugin;
120         }
121 
122         @Override
123         public String getCompleteKey() {
124             return getPluginKey() + ":" + key;
125         }
126 
127         @Override
128         public String getKey() {
129             return key;
130         }
131 
132         @Override
133         public HttpServlet getModule() {
134             return servletFactory.create();
135         }
136 
137 
138         @Override
139         public Optional<String> getScopeKey() {
140             return scopeKey;
141         }
142 
143         @Override
144         public List<String> getPaths() {
145             return paths;
146         }
147 
148         @Override
149         public Map<String, String> getInitParams() {
150             return initParams;
151         }
152 
153     }
154 
155 }