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